我可以通过一个真正的数据库链接调用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:标识符测试_PROC@MATTHEW@必须声明INST1'
BEGIN
test_pkg.test_proc@MATTHEW@INST1;
END;
/
错误报告:ORA-06550:第2行第5列:PLS-00201:标识符“TEST\u PKG”。测试_PROC@MATTHEW@必须声明INST1'
select ff@MATTHEW@INST1 from dual;
ORA-00904:“FF”:标识符00904无效。00000-%s:无效标识符“*原因:
*操作:
我们能看到完整的自上而下的脚本吗?我无法在我的数据库中重现该错误
SQL> create user foo identified by foo;
User created.
SQL> create user bar identified by bar;
User created.
SQL> grant create session, create procedure, create database link to foo;
Grant succeeded.
SQL> grant create session, create procedure, create database link to bar;
Grant succeeded.
SQL>
SQL> conn foo/foo
Connected.
SQL> create database link matthew@inst1 connect to bar identified by bar using 'db122';
Database link created.
SQL> select * from dual@matthew@inst1;
D
-
X
1 row selected.
SQL>
SQL> conn bar/bar
Connected.
SQL> create or replace
2 procedure my_proc is
3 begin
4 null;
5 end;
6 /
Procedure created.
SQL> conn foo/foo
Connected.
SQL> BEGIN
2 my_proc@MATTHEW@INST1;
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
显然,通过环回数据库链接创建的包/过程/函数需要授予调用方。
-- As the Bar schema
GRANT EXECUTE on test_proc TO foo;
GRANT EXECUTE on test_pkg TO foo;
GRANT EXECUTE on ff to foo;
当然,这在跨两个数据库的真正数据库链接上根本没有必要,那么为什么在这里有必要呢?
查看文档(向下滚动到“全局名称作为环回数据库链接”):
您可以使用数据库的全局名称作为环回数据库链接,而无需显式创建数据库链接。当SQL语句中的数据库链接与当前数据库的全局名称匹配时,数据库链接实际上被忽略。例如,假设数据库的全局名称为db1。实例通用域名格式。您可以在此数据库上运行以下SQL语句:从hr中选择*。employees@db1.example.com; 在本例中,@db1。实例SQL语句的com部分实际上被忽略。
因此,甲骨文似乎甚至不使用环回,从而解释了为什么需要授权。
问题内容: 想要连接到通过LAN连接的另一台PC上的数据库。我可以使用带有C:\ Users …这样的字符串的sql server db,但是我无法使用(\\ Server \ c \ user …)这样的字符串进行连接,但我尝试将db文件移动到“我的文档”中我得到这个错误。 我收到以下错误消息:尝试为文件(\\ SERVER \ Users \ Jeswills \ Documents \ TB
问题内容: 如何通过SQL将活动用户连接到PostgreSQL数据库?这可以是用户标识或用户数。 问题答案: (问题)你不知道那个信息吗 选择* from pg_user ; 或使用视图pg_stat_activity: 添加: 视图说: 每个服务器进程一行,显示数据库OID,数据库名称,进程ID,用户OID, 用户名 ,当前查询,查询的等待状态,当前查询开始执行的时间,进程开始的时间以及 客户端
主要内容:PL/SQL子程序的部分,创建存储过程,执行独立程序,删除独立存储过程,PL/SQL子程序中的参数模式,传递参数的方法在本章中,我们将讨论PL/SQL中的存储过程。 子程序是执行特定任务的程序单元/模块。 这些子程序组合起来形成更大的程序。这种做法被称为“模块化设计”。 子程序可以被称为调用程序的另一个子程序或程序调用。 可以在以下几个地方中创建一个子程序 - 在模式(schema)级别中 一个程序包中 在PL/SQL块中 在模式(schema)级别中,子程序是一个独立的子程序。它是使
我是pl/sql编程新手,我需要你的帮助。 我想做个手术。 更具体地说,我有如下表1 对于相同的COL1和COL2/COL3,请检查从COL4中选择不同的值,例如COL1=600、COL2=140/COL3=2和COL2=150/COL3=3返回20和35 并在此表TABLE1中插入行 如果P_FLG1='Y',我在表1中插入。如果P_FLG2='Y',我也在表3等中插入 我正在试着做下面的程序,
用Python来编写网站,必须要能够通过python操作数据库,所谓操作数据库,就是通过python实现对数据的连接,以及对记录、字段的各种操作。上一讲提到的那种操作方式,是看官直接通过交互模式来操作数据库。 安装python-MySQLdb 要想通过python来操作数据库,还需要在已经安装了mysql的基础上安装一个称之为mysqldb的库,它是一个接口程序,python通过它对mysql数据
问题内容: 我是PHP和SQL领域的一名新开发人员。到目前为止,我只完成了Objective- C编程。但是,我的一个项目要求我拥有一个在线数据库,我需要从我的应用程序访问该数据库。我打算使用该框架来远程访问数据库,如下所示: 但这是行不通的,因为我联系了我的托管服务提供商,并且他们已经对其进行了设置,因此我无法从外部主机访问我的数据库(出于安全性考虑)。因此,我将不得不寻找替代方案。我唯一想到的