使用execute immediate时打印绑定变量

时间:2014-01-03 10:52:04

标签: oracle plsql

我正在尝试在执行立即声明后打印出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;
感谢你......

2 个答案:

答案 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;