为什么写在procedure中就缺少表达式?独立执行就没有问题?

myoldsaturn 2004-11-10 11:42:41
我目前是以system登录:错误都是在组合字符串时发生,写在procedure中就缺少表达式
,独立执行就没有问题(说明语句时没有逻辑上或语法上的问题的),请教:

53 open dbcursor3 for 'select '||strTemp||' from '||strdbcursor1;
ERROR 位于第 1 行:
ORA-00936: 缺少表达式
ORA-06512: 在"TESTMIS.REFRESHINDEX", line 53
ORA-06512: 在line 1

36 execute immediate 'insert into testmis.zindex_info(dbbm,flbm,bbm,nr) '||
37 'select ''FXHY'',''FXHY_NULL'','''||strdbcursor1||''','||strTemp||' from '||strdbcursor1

OR 位于第 1 行:
-00936: 缺少表达式
-06512: 在"TESTMIS.REFRESHINDEX", line 36
-06512: 在line 1
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluelamb 2004-11-10
  • 打赏
  • 举报
回复
1. open dbcursor3 for 'select '||strTemp||' from '||strdbcursor1;
这样肯定不行,存储过程中游标不能这样使用
2.strdbcursor3 varchar2(4000); ---varchar2最大到4000,超过了用clob或者long
myoldsaturn 2004-11-10
  • 打赏
  • 举报
回复
如果有问题,那么独立执行为什么没有问题呢?我想是否是,独立执行和写入procedure的语句有什么不同要求
myoldsaturn 2004-11-10
  • 打赏
  • 举报
回复
第一个问题的语句
declare
type dbcur is ref cursor;
dbcursor3 dbcur;
strdbcursor3 varchar2(5000);
begin
open dbcursor3 for 'select '||strTemp||' from '||strdbcursor1;
fetch dbcursor3 into strdbcursor3;
while dbcursor3%found loop
recNum:=recNum+1;
insert into testmis.zindex_info (dbbm,flbm,bbm,nr) values
('FXHY','FXHY_NULL',strdbcursor1,strdbcursor3);
fetch dbcursor3 into strdbcursor3;
end loop;
close dbcursor3;
end;

第二个问题的语句
while dbcursor2%found loop

if strTemp is null then
strTemp:=strdbcursor2;
else
strTemp:=strTemp||'||'' ''|| '||strdbcursor2;
end if;
fetch dbcursor2 into strdbcursor2;
end loop;
close dbcursor2;
end;
execute immediate 'insert into testmis.zindex_info(dbbm,flbm,bbm,nr) '||
'select ''FXHY'',''FXHY_NULL'','''||strdbcursor1||''','||strTemp||' from '||strdbcursor1


fetch dbcursor1 into strdbcursor1;
end loop;
bzszp 2004-11-10
  • 打赏
  • 举报
回复
组合的语句有问题。

把组合的语句输出出来看看
myoldsaturn 2004-11-10
  • 打赏
  • 举报
回复
对了,如果换成'select * from all_users'之类的语句就没有问题
myoldsaturn 2004-11-10
  • 打赏
  • 举报
回复
我试过了,我将將'select '||strTemp||' from '||strdbcursor1;
插入一个表中,形成select 语句,都是正确的
judyhui7612 2004-11-10
  • 打赏
  • 举报
回复
應該是組合語句的問題,你用dbms_output 將'select '||strTemp||' from '||strdbcursor1;
輸出看看是否正確?

我有試過,可以這樣組合的
myoldsaturn 2004-11-10
  • 打赏
  • 举报
回复
请问:就我需要实现的东西,不这么用,应该如何使用???

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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