我正在尝试在执行立即声明后打印出vSQL变量。 我知道执行立即声明ll给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;
感谢你......
答案 0 :(得分:3)
正如评论者所写,你只能将数据绑定到字段,你不能绑定库对象的名字/等。
所以我认为你只能在没有约束的情况下做到这一点:
DECLARE
vSQL VARCHAR2(100);
vOwner VARCHAR2(100);
vTableName VARCHAR2(100);
vPartition VARCHAR2(100);
BEGIN
vOwner := 'STG';
vTableName := 'TEMP';
vSQL := 'ALTER TABLE ' || vOwner || '.' || vTableName || ' TRUNCATE PARTITION('||vPartition||')';
EXECUTE IMMEDIATE vSQL;
DBMS_OUTPUT.PUT_LINE(vSQL);
END;
答案 1 :(得分:0)
如果您知道将要发生错误,请抓住它然后打印。
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;
EXCEPTION --The error will get catched here.
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(vSQL); --This will print exactly 'ALTER TABLE :1.:2 TRUNCATE PARTITION(:3)'
--If you want to print it with the variables do something like:
DBMS_OUTPUT.PUT_LINE('ALTER TABLE ' || vOwner || ', ' || vTableName || ', ' || vPartition;
END;