日期:2014-05-17  浏览次数:21050 次

execute immediate执行sql问题
我写一个存储过程创建索引,定义一个变量
v_sql:='create index'||' '||i.index_name||' '||'on'||' '||i.table_name||'('||i.column_name||')'||' '||'tablespace'||' '||i_tablespace_name;

然后execute immediate v_sql; 一直报错:ORA-00942: 表或视图不存在。。将execute immediate v_sql注释掉,程序是没问题的。一致报这一行错误。请问execute immediate v_sql;这样写法错了吗???
------解决方案--------------------
引用:
我写一个存储过程创建索引,定义一个变量
v_sql:='create index'
------解决方案--------------------
' '
------解决方案--------------------
i.index_name
------解决方案--------------------
' '
------解决方案--------------------
'on'
------解决方案--------------------
' '
------解决方案--------------------
i.table_name
------解决方案--------------------
'('
------解决方案--------------------
i.column_name
------解决方案--------------------
')'
------解决方案--------------------
' '
------解决方案--------------------
'tablespace'
------解决方案--------------------
' '
------解决方案--------------------
i_tablespace_name;

然后execute immediate v_sql; 一直报错:ORA-00942: 表或视图不存在。。将execute immediate v_sql注释掉,程序是没问题的。一致报这一行错误。请问execute immediate v_sql;这样写法错了吗???

你可以先将v_sql打印出来然后执行你打印出来的这句命令看能成功么
------解决方案--------------------
execute immediate v_sql只是执行这个字符串的SQL,你把它注释掉当然就不会执行,也就不会报错了。
按楼上所说先打印出你的sql语句,在SQL window中执行看看。

根据你的报错信息,初步问题是相关的表不存在,应先检查相关的对象是否存在
------解决方案--------------------
缺失右括号 很有可能是拼接错误 你还是要打印出来才行