Oracle PLSQL中的动态查询错误

Oracle PLSQL中的动态查询错误,oracle,plsql,execute-immediate,database-link,Oracle,Plsql,Execute Immediate,Database Link,我正在尝试执行此过程: 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'; E

我正在尝试执行此过程:

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

有人能帮我解决我这里做错了什么吗?

它不起作用的原因是因为不能使用bind变量作为dblink。运行以下操作时,会出现相同的错误:

select*from dual@:dblink

如果您绝对必须使用动态sql,则必须将dblink名称连接到语句中,但您必须注意,您现在可以使用sql注入:


V|u SQL:=“从dba|u选项卡|u修改@中选择表|u名称、表|所有者”|DB|u链接

请回答此问题。。。您可以在dba_tab_modifications@'|| DB_LINK;“字符串的一部分是为了最小化sql注入漏洞谢谢,@James-这是我不知道的。