【发布时间】:2012-10-18 04:35:19
【问题描述】:
这是我正在尝试运行的程序。它插入两个表 - table1 和一个关联表 table2。
create or replace procedure Insert_Row (summary IN VARCHAR2
description IN VARCHAR2, status IN NUMBER,
date_submitted IN DATE, last_updated IN DATE,
owner_id IN NUMBER, reporter_id IN NUMBER,
foo IN VARCHAR2, bar IN VARCHAR2,
first_assignee IN NUMBER)
is
l_cur_id number;
begin
insert into table1
(summary, description, status, date_submitted,
last_updated, owner_id, reporter_id,
foo, bar)
values( :summary, :description, :status,
to_date(:date_submitted,'YYYY-MM-DD'),
to_date(:last_updated,'YYYY-MM-DD'), :owner_id,
:reporter_id, :foo, :bar)
returning action_id into l_cur_id;
insert into table2(action_id, assignee_id)
values(l_cur_id,:test);
commit;
end;"
没有参数,查询工作正常。 IE。如果我删除所有:somethings 并对值进行硬编码,那么当我运行exec Insert_Row; 时它运行时不会出现错误
用参数(用:somethings),有错误:
show errors procedure Insert_Row;
Errors: check compiler log
2/4 PLS-00103: Encountered the symbol "DESCRIPTION" when expecting one of the following:
:= . ) , @ % default character
The symbol "," was substituted for "DESCRIPTION" to continue.
14/13 PLS-00049: bad bind variable 'SUMMARY'
14/23 PLS-00049: bad bind variable 'DESCRIPTION'
14/37 PLS-00049: bad bind variable 'STATUS'
15/21 PLS-00049: bad bind variable 'DATE_SUBMITTED'
16/21 PLS-00049: bad bind variable 'LAST_UPDATED'
16/50 PLS-00049: bad bind variable 'OWNER_ID'
17/13 PLS-00049: bad bind variable 'REPORTER_ID'
17/27 PLS-00049: bad bind variable 'FOO'
17/33 PLS-00049: bad bind variable 'BAR'
20/21 PLS-00049: bad bind variable 'TEST'
我做错了什么?
编辑
@ron tornambe 的解决方案后查询是:
create or replace procedure Insert_Row (summary IN VARCHAR2,
description IN VARCHAR2, status IN NUMBER,
date_submitted IN DATE, last_updated IN DATE,
owner_id IN NUMBER, reporter_id IN NUMBER,
foo IN VARCHAR2, bar IN VARCHAR2,
first_assignee IN NUMBER)
is
l_cur_id number;
begin
insert into table1
(summary, description, status, date_submitted,
last_updated, owner_id, reporter_id,
foo, bar)
values( :summary, :description, :status,
to_date(:date_submitted,'YYYY-MM-DD'),
to_date(:last_updated,'YYYY-MM-DD'), :owner_id,
:reporter_id, :foo, :bar)
returning action_id into l_cur_id;
insert into table2(action_id, assignee_id)
values(l_cur_id,:test);
commit;
end;"
修改后的错误是:
14/13 PLS-00049: bad bind variable 'SUMMARY'
14/23 PLS-00049: bad bind variable 'DESCRIPTION'
14/37 PLS-00049: bad bind variable 'STATUS'
15/21 PLS-00049: bad bind variable 'DATE_SUBMITTED'
16/21 PLS-00049: bad bind variable 'LAST_UPDATED'
16/50 PLS-00049: bad bind variable 'OWNER_ID'
17/13 PLS-00049: bad bind variable 'REPORTER_ID'
17/27 PLS-00049: bad bind variable 'FOO'
17/33 PLS-00049: bad bind variable 'BAR'
20/21 PLS-00049: bad bind variable 'TEST'
非常感谢。
【问题讨论】:
-
去掉所有参数前面的冒号。所以
:somethings变成了somethings。 -
@Nicholas Krasnov 再次感谢。错误消失了,但是您如何调用该程序?我现在在 PHP 中执行此操作:
$parse = oci_parse( $conn, $sql ); oci_bind_by_name( $parse, 'summary', $this->summary );给出:Warning: oci_bind_by_name(): ORA-01036: illegal variable name/number(其中$sql是更正后的查询)。 -
好的,我快到了。这是我的程序调用:
exec Insert_Action('test','test',1,to_date('2012-01-01','YYYY-MM-DD'),to_date('2012-01-01','YYYY-MM-DD'),1,1,'test','test','test');,这是(希望如此)最终错误:Error starting at line 1 in command: exec Insert_Action('test','test',1,to_date('2012-01-01','YYYY-MM-DD'),to_date('2012-01-01','YYYY-MM-DD'),1,1,'test','test','test') Error report: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1 06502. 00000 - "PL/SQL: numeric or value error%s" *Cause: *Action: -
@ale 你的最后一个参数是一个数字,你正在尝试插入一个字符。
标签: php sql oracle stored-procedures oracle11g