Oracle11g DB Link ampersand替换-ORA-02019:未找到远程数据库的连接说明
我有一个安装脚本,在这个脚本中,我试图基于远程数据库中的表创建多个视图。脚本将在多个数据库上执行,每个数据库都有自己的远程数据库。我的目标不是创建多个版本的脚本,而是在安装期间将remote db link作为提示的输入参数。但是,当我执行安装脚本时,第一个视图在ORA-02019中失败,而其余视图成功创建 样本测试版本: 安装.sqlOracle11g DB Link ampersand替换-ORA-02019:未找到远程数据库的连接说明,oracle11g,ampersand,Oracle11g,Ampersand,我有一个安装脚本,在这个脚本中,我试图基于远程数据库中的表创建多个视图。脚本将在多个数据库上执行,每个数据库都有自己的远程数据库。我的目标不是创建多个版本的脚本,而是在安装期间将remote db link作为提示的输入参数。但是,当我执行安装脚本时,第一个视图在ORA-02019中失败,而其余视图成功创建 样本测试版本: 安装.sql Set serveroutput on SET VERIFY OFF Alter Session Set current_schema = TEST; SE
Set serveroutput on
SET VERIFY OFF
Alter Session Set current_schema = TEST;
SET VERIFY ON
DEFINE DB_LINK = &&db_link
PROMP Install started ...
@./SCRIPTS/views.sql
PROMP Install ended
quit
--View1
Create or replace View tmp_cards as Select nvl((select count(*) from auths@&db_link where cardid = t.id),0) cnt_auths,t.* From Cards@&db_link t ;
--View2
Create or replace View tmp_Auth as Select * From auths@&db_link;
@./SCRIPTS/views.sql
Set serveroutput on
SET VERIFY OFF
Alter Session Set current_schema = TEST;
SET VERIFY ON
DEFINE DB_LINK = &&db_link
PROMP Install started ...
@./SCRIPTS/views.sql
PROMP Install ended
quit
--View1
Create or replace View tmp_cards as Select nvl((select count(*) from auths@&db_link where cardid = t.id),0) cnt_auths,t.* From Cards@&db_link t ;
--View2
Create or replace View tmp_Auth as Select * From auths@&db_link;
安装日志
IMPLUSER@db01 SQL>@install.sql
Session altered.
Enter value for db_link: db02
Install started ...
old 1: Create or replace View tmp_cards as Select nvl((select count(*) from auths@&db_link where cardid = t.id),0) cnt_auths,t.* From Cards@&db_link t
new 1: Create or replace View tmp_cards as Select nvl((select count(*) from auths@db02 where cardid = t.id),0) cnt_auths,t.* From Cards@db02 t
Create or replace View tmp_cards as Select nvl((select count(*) from auths@db02 where cardid = t.id),0) cnt_auths,t.* From Cards@db02 t
*
ERROR at line 1:
ORA-02019: connection description for remote database not found
old 1: Create or replace View tmp_Auth as Select * From auths@&db_link
new 1: Create or replace View tmp_Auth as Select * From auths@db02
View created.
Install ended
如果我在PL/SQL中通过命令窗口直接创建视图,那么第一个视图将成功创建
SQL> Create or replace View tmp_cards as Select nvl((select count(*) from auths@db02 where I002_NUMBER = t.cardnumber),0) cnt_auths,t.* From Cards@db02 t;
View created
SQL>
我错过了什么 无法通过SQL*Plus在11.2.0.4中复制。这就是所有涉及的代码吗?失败的create view语句和正常工作的create view语句之间没有发生任何其他情况?views.sql的示例版本与原始文件之间的唯一区别在于,我在视图之间有一些注释。我不认为这些是相关的。更新原始帖子以更准确地反映原始脚本。顺便说一句,对于您的第一个视图,我将使用左连接而不是子查询,但是您需要显式列出cards列-这比使用
*
要好。也许值得一试,看看它的行为是否相同?是的,好吧,这些评论并不重要,但在运行此程序时,我已经评论了非常重要的部分,alter session
。这似乎是预期的行为,请参阅MOS文档ID 793693.1;但这并不能解释为什么随后的视图创建会起作用。另请参阅doc、2086082.1、bug 20606216和其他;而且查询没有看到远端存在什么。根据MOS中的“预期行为”注释,我很确定您的第二个创建视图也应该失败,尽管bug 5358967可能建议它现在仍然可以工作。从MOS来看,有很多类似的东西,包括11gR2。我认为对于查询连接两个远程表(第二个没有)的任何视图都是失败的;其中一个可以工作(即使独立查询不能!)。我认为您需要为此提出服务请求。不能通过SQL*Plus在11.2.0.4中复制。这就是所有涉及的代码吗?失败的create view语句和正常工作的create view语句之间没有发生任何其他情况?views.sql的示例版本与原始文件之间的唯一区别在于,我在视图之间有一些注释。我不认为这些是相关的。更新原始帖子以更准确地反映原始脚本。顺便说一句,对于您的第一个视图,我将使用左连接而不是子查询,但是您需要显式列出cards列-这比使用*
要好。也许值得一试,看看它的行为是否相同?是的,好吧,这些评论并不重要,但在运行此程序时,我已经评论了非常重要的部分,alter session
。这似乎是预期的行为,请参阅MOS文档ID 793693.1;但这并不能解释为什么随后的视图创建会起作用。另请参阅doc、2086082.1、bug 20606216和其他;而且查询没有看到远端存在什么。根据MOS中的“预期行为”注释,我很确定您的第二个创建视图也应该失败,尽管bug 5358967可能建议它现在仍然可以工作。从MOS来看,有很多类似的东西,包括11gR2。我认为对于查询连接两个远程表(第二个没有)的任何视图都是失败的;其中一个可以工作(即使独立查询不能!)。我认为您需要为此提出服务请求。