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-这是我不知道的。