2015-07-22 57 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