我能够在一个真实的数据库链接上调用PL / SQL过程和包,但是在环回数据库链接(引用同一数据库中的模式的数据库链接,用于测试目的)上似乎无法这样做,在两个不同的数据库中
是否有通过环回数据库链接执行远程plsql包/过程/函数所需的技巧?
本地数据库(foo):
CREATE DATABASE LINK MATTHEW@INST1 CONNECT TO bar IDENTIFIED BY password USING 'MATTHEW';
-- this works fine, as well as selecting from other tables
SELECT * FROM dual@MATTHEW@INST1;
远程数据库(条形图):
create package test_pkg
is
PROCEDURE test_proc;
end;
/
create package body test_pkg
is
procedure test_proc
is
begin
dbms_output.put_line('hello');
end;
end;
/
create procedure test_proc
is
begin
dbms_output.put_line('hello');
end;
/
create or replace function ff return number
is
begin
return 55;
end;
/
本地数据库(foo)
BEGIN
test_proc@MATTHEW@INST1;
END;
/
错误报告:ORA-06550:第2行,第5列:PLS-00201:必须声明标识符'TEST_PROC @ MATTHEW @ INST1'
BEGIN
test_pkg.test_proc@MATTHEW@INST1;
END;
/
错误报告:ORA-06550:第2行,第5列:PLS-00201:必须声明标识符'TEST_PKG.TEST_PROC @ MATTHEW @ INST1'
select ff@MATTHEW@INST1 from dual;
ORA-00904:"FF":无效标识符00904. 00000 - "%s: invalid identifier" *原因:
*行动:
2 回答
显然,需要将通过环回数据库链接创建的包/过程/函数授予调用者 .
当然,对于跨两个数据库的真正数据库链接,这根本不是必需的,那么为什么这里有必要呢?
查看documenation(向下滚动到"Global Name as a Loopback Database Link"):
因此,似乎Oracle甚至不使用环回,因此解释了为什么需要授权 .
我们能看到一个完整的自上而下的脚本吗?我无法在我的数据库上重现该错误