我正在尝试执行此过程:
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 dba_tab_modifications@: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
有人可以帮我解决我在这里做错的事吗?
答案 0 :(得分:2)
它不起作用的原因是因为你不能使用绑定变量作为dblink。运行以下内容时会出现相同的错误:
select * from dual@:dblink;
如果绝对必须使用动态sql,则必须将dblink名称连接到语句中 - 但是您必须知道您现在已经开放SQL注入:
V_SQL := 'SELECT table_name,table_owner FROM dba_tab_modifications@'||DB_LINK;