我正在将MSsql脚本转换为Oracle,我无法弄清楚使用变量代替表名或列的语法.
这是一个简单的例子,我一直在尝试在Oracle sql Developer中工作,所以我可以更好地理解语法:
set serveroutput on format wrapped; declare VR_TABLE VARCHAR2(256); VR_UPDATE VARCHAR2(256); begin VR_TABLE :='SYSTEM_STATUS'; EXECUTE IMMEDIATE 'select UPDATE_VERSION INTO VR_UPDATE from ' || VR_TABLE || 'where rownum < 2 ;' end;
其中VR_TABLE是变量表名,它将在循环的每次迭代中被更改.
有人可以指出我做错了什么,或者将我链接到一个对我来说有用的网站吗?我已经阅读了一些这方面的教程,但到目前为止我还没有运气.
>您需要在表名和后续WHERE子句之间留一个空格
> INTO需要成为EXECUTE IMMEDIATE的一部分,而不是动态sql语句的一部分.
>动态sql语句不应具有尾随分号
> EXECUTE IMMEDIATE语句应以分号结尾
> INTO需要成为EXECUTE IMMEDIATE的一部分,而不是动态sql语句的一部分.
>动态sql语句不应具有尾随分号
> EXECUTE IMMEDIATE语句应以分号结尾
将这些放在一起,这样的事情应该有效
declare VR_TABLE VARCHAR2(256); VR_UPDATE VARCHAR2(256); begin VR_TABLE :='SYSTEM_STATUS'; EXECUTE IMMEDIATE 'select UPDATE_VERSION from ' || VR_TABLE || ' where rownum < 2' INTO VR_UPDATE; end;