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 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
谁能告诉我我哪里做错了吗?

它不起作用的原因是您不能使用绑定变量作为dblink。当运行以下命令时,会得到相同的错误:

select * from dual@:dblink;

如果你必须使用动态sql,你必须把dblink的名字连接到语句中,但是你必须意识到你现在对sql注入是开放的:

V_SQL := 'SELECT table_name,table_owner FROM dba_tab_modifications@'||DB_LINK;

相关内容

  • 没有找到相关文章

最新更新