Oracle存储过程运行时ORA-01007变量不在选择列表中

Oracle存储过程运行时ORA-01007变量不在选择列表中,oracle,stored-procedures,plsql,dynamic-sql,Oracle,Stored Procedures,Plsql,Dynamic Sql,我编译了一个没有错误/警告的存储过程,如下所示: 创建或替换过程my_schema.SP_UPDATE_MEMBERnoP in varchar2、nameP in varchar2、idNoP in varchar2、birthdayP in varchar2、emailP in varchar2、phoneP in varchar2、passwordP in varchar2、tableP in varchar2 是 v_prg_name varchar220:=“SP_更新_成员”; v_

我编译了一个没有错误/警告的存储过程,如下所示:

创建或替换过程my_schema.SP_UPDATE_MEMBERnoP in varchar2、nameP in varchar2、idNoP in varchar2、birthdayP in varchar2、emailP in varchar2、phoneP in varchar2、passwordP in varchar2、tableP in varchar2 是 v_prg_name varchar220:=“SP_更新_成员”; v_cnt编号8:=0; sys_sql varchar21000; 开始 InsertlogSYSDATE,v_prg_名称,“1.0开始”-这是一个简单的日志,尝试删除它并没有解决我的问题 sys_sql:=sys_sql | | | | | | | | | | | | | | | | | | | 124; 如果nameP不为null,则 sys_sql:=sys_sql | |'name='| | nameP | |','; 如果结束; 如果idNoP不为空,则 sys_sql:=sys_sql | |'id_no='| | idNoP | |','; 如果结束; 如果birthdayP不为null,则 sys_sql:=sys_sql | | |'生日=截止日期'| | | | |',yyyy/MM/dd'; 如果结束; 如果emailP不为null,则 sys_sql:=sys_sql | |'email='| | emailP | |','; 如果结束; 如果phoneP不为null,则 sys_sql:=sys_sql | |'mobile='| | phoneP | |','; 如果结束; 如果passwordP不为null且lengthpasswordP>0,则 sys_sql:=sys_sql | |'password=md5_hash'| | | |','; 如果结束; sys_sql:=sys_sql | | | no='| | noP | |''-我把它放在防止,问题 sys_sql:=sys_sql | | |'其中no='| | noP | |; 在v_cnt中执行即时系统sql; 犯罪 InsertlogSYSDATE,v_prg_名称,“2.0完成,无错误”-这是一个简单的日志,尝试删除它并没有解决我的问题 例外 当其他人 声明 错误_timevarchar230:=RTRIMTO_CHARSYSDATE,'yyyyy/MM/DD,HH24:MI:SS'; 错误代码号:=SQLCODE; 错误\u msg VARCHAR2300:=SQLERRM; 开始 回降; DBMS|u OUTPUT.PUT|LINEerror|u time |','| TO|u CHARerror| u code |','| error|u msg-这是一个简单的日志,尝试删除它并没有解决我的问题 InsertlogSYSDATE,v_prg_name,error_msg | | |',3.0 error,sql:'| | sys| sql-这是一个简单的日志,尝试删除它并没有解决我的问题 终止 终止 / 并在TOAD中使用此脚本反馈调用它,方法已调用且没有错误消息:

调用my_schema.SP_UPDATE_成员'00112233','UserName','A123456789','1970/01/01','somemail@mail.com","0912346578","123abc","成员",; 但是成员数据没有更新,所以我检查了我的错误日志,它说:

ORA-01007:变量不在选择列表中,3.0错误,sql: 更新成员 设置name='UserName', 识别号为A123456789, 生日=截止日期'1970/01/01','yyyy/MM/dd', 电子邮件somemail@mail.com', mobile='0912345678', password=md5_散列'123abc', no='00112233' 其中编号为00112233'
我没有找到导致这个ORA-01007错误的原因,你能帮我找到它吗?或者一些提示…

执行汇编语句时如下所示:

EXECUTE IMMEDIATE sys_sql INTO v_cnt;
但这是一个UPDATE语句,它不返回任何内容。所以INTO条款是错误的

大概您想知道更新了多少行?试试这个:

EXECUTE IMMEDIATE sys_sql;
v_cnt := sql%rowcount;

您可以这样执行汇编语句:

EXECUTE IMMEDIATE sys_sql INTO v_cnt;
但这是一个UPDATE语句,它不返回任何内容。所以INTO条款是错误的

大概您想知道更新了多少行?试试这个:

EXECUTE IMMEDIATE sys_sql;
v_cnt := sql%rowcount;

通过将其删除到v_cnt,我的问题终于解决了,谢谢你节省了我的时间~通过将其删除到v_cnt,我的问题终于解决了,谢谢你节省了我的时间~