【发布时间】:2015-01-28 22:36:56
【问题描述】:
我试图在执行立即语句之后打印出 vSQL 变量。 我知道立即执行语句会给出 ORA-00903,因为你不能将变量绑定到表等。我只想在使用后打印该字符串 声明。
这是我的代码:
DECLARE
vSQL VARCHAR2(100);
vOwner VARCHAR2(100);
vTableName VARCHAR2(100);
vPartition VARCHAR2(100);
BEGIN
vOwner := 'STG';
vTableName := 'TEMP';
vSQL := 'ALTER TABLE :1.:2 TRUNCATE PARTITION(:3)';
EXECUTE IMMEDIATE vSQL USING vOwner,vTableName,vPartition;
--DBMS_OUTPUT.PUT_LINE(vSQL); -- Something like this
END;
感谢您的想法...
【问题讨论】:
-
不允许绑定标识符。如果您只是想打印
alter table语句,为什么execute immediate语句在那里?除非您放弃尝试绑定标识符的想法,否则它永远不会成功执行。 -
绑定变量不能用于设置模式对象!而是形成一个字符串,别无他法!
-
在您的情况下,当您与绑定变量一起运行时,vSQL 永远不会被修改,如果您认为 :1 将被替换为 vOwner 值,这是不可能的 . Oracle 在执行期间执行所有替换。
-
那么是否可以在执行期间跟踪替换?