我在PLSQL中有以下功能,它可以远程连接到不同的数据库链接以更改密码:
FUNCTION fun_change_password(DB_LINK_VARIABLE varchar2)
RETURN binary_integer IS
jobid binary_integer;
BEGIN
dbms_job.submit@DB_LINK_VARIABLE (jobid,'begin execute immediate ''alter user MYUSER identified by mypassw''; end;');
COMMIT;
RETURN jobid;
END;
我的目标是指定使用哪个数据库链接,并在名为 *DB_LINK_VARIABLE* 的 varchar2 变量中发送其名称。但是当我将其编译成包时,解析器向我发送一个错误:
PLS-00352: Unable to access another database 'DB_LINK_VARIABLE'
显然,我预先配置并测试了所有数据链路并且工作完美。
如何在此代码中使用变量“DB_LINK_VARIABLE”?
最佳答案
您可以使用dynamic SQL来做到这一点通过执行匿名 PL/SQL block 。
下面是一个简单的示例,我在其中执行 dbms_utility.get_time通过数据库链接运行。
$ cat so35.sql
declare
function remote_time(p_dblink in varchar2) return number is
v_time number;
begin
execute immediate
'begin :time := dbms_utility.get_time@' || p_dblink || '; end;'
using out v_time;
return v_time;
end;
begin
dbms_output.put_line('time = ' || remote_time('foo'));
end;
/
SQL> select dbms_utility.get_time as local, dbms_utility.get_time@foo as remote from dual;
LOCAL REMOTE
---------- ----------
77936814 1546395927
SQL> @so35.sql
time = 1546396850
PL/SQL procedure successfully completed.
SQL>
关于oracle - 接收数据库链接名称作为 Oracle PLSQL 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094182/