2015-07-22 229 views
0

我試圖執行此過程:動態查詢錯誤PLSQL

CREATE OR REPLACE PROCEDURE SP_DYNAMIC 
AS 
    tbl_list VARCHAR2(2000); 
    DBLINK VARCHAR2(100); 
    V_SQL VARCHAR2(1000); 
BEGIN 
    DBLINK := 'SOME_LINK'; 
    V_SQL := 'SELECT table_name,table_owner FROM [email protected]:DB_LINK'; 

    EXECUTE IMMEDIATE V_SQL USING DBLINK; 

    COMMIT; 

    Dbms_Output.PUT_LINE (TBL_LIST); 
END; 

但是當我執行存儲過程我得到的錯誤:

ORA-01729: database link name expected 
ORA-06512: at "SYSTEM.SP_DYNAMIC" 
ORA-06512: at line 2 

有人可以幫助我,我是什麼在這裏做錯了嗎?

回答

2

它不起作用的原因是因爲您不能使用綁定變量作爲dblink。 - 但你必須要知道,你

select * from [email protected]:dblink;

如果你絕對必須使用動態SQL,你必須在DBLINK名稱連接成聲明:運行以下時,你得到同樣的錯誤'現在重新開放的SQL注入:

V_SQL := 'SELECT table_name,table_owner FROM [email protected]'||DB_LINK;

+1

Fuether這個答案...你可以dba_tab_modifications結果使用DMBS_ASSERT.QUALIFIED_SQL_NAME @' || DB_LINK; 「爲了儘量減少sql注入漏洞的字符串部分 – James

+0

謝謝,@詹姆斯 - 這是我沒有意識到的。 – Boneist