Php Can';Oracle过程中的t绑定变量
这是我正在尝试运行的一个过程。它插入到两个表中—Php Can';Oracle过程中的t绑定变量,php,sql,oracle,stored-procedures,oracle11g,Php,Sql,Oracle,Stored Procedures,Oracle11g,这是我正在尝试运行的一个过程。它插入到两个表中—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, fo
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;"
如果没有参数,查询工作正常。也就是说,如果我删除了所有的:somethings
并对值进行了硬编码,那么当我运行exec Insert\u行时,它运行时不会出错代码>
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'
对于参数(使用:somethings
),存在以下错误:
显示错误过程插入\u行代码>
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'
非常感谢。您只需在“VARCHAR2中的摘要”后面加一个逗号即可。此外,关键字“IN”是默认值。7您只需在“VARCHAR2中的摘要”后面加一个逗号即可。此外,关键字“IN”是默认值。7
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;
如果要传递参数,则不需要冒号,可以直接指定参数名称。另一点是,如果您是从客户端或前端调用此过程,最好从过程中删除commit,并使用调用客户端的commit。试试这个方法
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;
如果要传递参数,则不需要冒号,可以直接指定参数名称。另一点是,如果您是从客户端或前端调用此过程,最好从过程中删除commit,并使用调用客户端的commit。@ale Postprocedure@ale发布修改后的过程在所有参数前删除冒号。所以:somethings
变成somethings
@Nicholas Krasnov再次感谢。错误消失了,但如何调用该过程?我现在正在用PHP做这件事:$parse=oci\u parse($conn,$sql);oci_按名称绑定($parse,'summary',$this->summary)代码>给出:警告:oci_bind_by_name():ORA-01036:非法变量名称/编号
(其中,$sql
是正确的查询)。请看一看或看一看好的,我就快到了。这是我的过程调用:exec Insert_Action('test','test',1,to_date('2012-01-01','YYYY-MM-DD'),to_date('2012-01-01','yyyyy-MM-DD'),1,1,'test','test和'test')代码>这是(希望)最后的错误:从命令第1行开始的错误:exec Insert_Action('test','test',1,to_date('2012-01-01','yyyyy-MM-DD'),to_date('2012-01-01','yyyyyy-MM-DD'),1,1,'test,'test','test错误报告:ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误ORA-06512:第106502行。00000-“PL/SQL:数值或值错误%s”*原因:*操作:
@ale您的最后一个参数是一个数字,您正在尝试插入一个字符。请删除所有参数前面的冒号。所以:somethings
变成somethings
@Nicholas Krasnov再次感谢。错误消失了,但如何调用该过程?我现在正在用PHP做这件事:$parse=oci\u parse($conn,$sql);oci_按名称绑定($parse,'summary',$this->summary)代码>给出:警告:oci_bind_by_name():ORA-01036:非法变量名称/编号
(其中,$sql
是正确的查询)。请看一看或看一看好的,我就快到了。这是我的过程调用:exec Insert_Action('test','test',1,to_date('2012-01-01','YYYY-MM-DD'),to_date('2012-01-01','yyyyy-MM-DD'),1,1,'test','test和'test')代码>这是(希望)最后的错误:从命令第1行开始的错误:exec Insert_Action('test','test',1,to_date('2012-01-01','yyyyy-MM-DD'),to_date('2012-01-01','yyyyyy-MM-DD'),1,1,'test,'test','test错误报告:ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误ORA-06512:第106502行。00000-“PL/SQL:数值或值错误%s”*原因:*操作:
@ale您的最后一个参数是一个数字,您正在尝试插入一个字符。Polppan请参阅对@Nicholas Krasnov的问题评论的评论。谢谢。@ale对php了解不多,但请看一看,波尔潘请看对@Nicholas Krasnov的问题评论的评论。谢谢。@ale对php了解不多,但请看一下和