动态sql 问题

学海无涯-回头是岸 2017-06-22 02:18:54
ZRH:='&唯一号';
operation:='&要执行的操作';
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH||'
RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO :data1';
execute immediate V_SQL
RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO TB_CS1;

这个句子报错 应该怎么写啊。
执行 操作后的 数据 放到 TB_CS1 pl/sql表中 。
...全文
1347 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 tentung 的回复:
中间(R(MPH,'-',-1,1)+) 这个地方出现当引号的地方oracle 就认为是拼接结束了。 建议使用 测试 。
v_sql := OPERATION|| ' HHH SET FH=SUBSTR(MPH,INSTR(MPH,''-'',-1,1)+1) WHERE ZRZID='||ZRH||' RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO TB_CS1'; /* dbms_output.put_line(V_SQL); END;*/ EXECUTE IMMEDIATE V_SQL RETURNING BULK COLLECT INTO TB_CS1; 我打印出来看是没问题的 但是 动态执行报错。说 EXECUTE IMMEDIATE V_SQL 这个表达式类型错误。
TENTUNG 2017-06-29
  • 打赏
  • 举报
回复
中间(R(MPH,'-',-1,1)+) 这个地方出现当引号的地方oracle 就认为是拼接结束了。
建议使用 测试 。
  • 打赏
  • 举报
回复
引用 5 楼 junes06 的回复:
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH||' RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO :data1'; execute immediate V_SQL RETURNING BULK COLLECT INTO TB_CS1; 这样试一下可以吗
报 表达式类型错误
junes06 2017-06-23
  • 打赏
  • 举报
回复
先dbms_output.put_line(v_sql); 把你的语句打印出来,看一下有什么
junes06 2017-06-23
  • 打赏
  • 举报
回复
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH||' RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO :data1'; execute immediate V_SQL RETURNING BULK COLLECT INTO TB_CS1; 这样试一下可以吗
  • 打赏
  • 举报
回复
引用 3 楼 junes06 的回复:
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH
v_sql 这样写,把RETURNNING 后面的去掉 ,和下面的调用的时候也重复了

还是报错
junes06 2017-06-23
  • 打赏
  • 举报
回复
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH v_sql 这样写,把RETURNNING 后面的去掉 ,和下面的调用的时候也重复了
  • 打赏
  • 举报
回复
引用 1 楼 junes06 的回复:

还是报错
junes06 2017-06-22
  • 打赏
  • 举报
回复
V_SQL:=''||operation||' HHH SET FH=SUBSTR(MPH,INSTR(MPH,'-',-1,1)+1) WHERE ZRZID='||ZRH||' RETURNING FWID, HZL,SCJZMJ,MPH,FH BULK COLLECT INTO :data1'; 这个字符串里面就不要加 INTO :data1 应为你下面用execute immediate 执行的时候有INTO INTO TB_CS1;了

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧