【问题标题】:insert in another database using tns使用 tns 插入另一个数据库
【发布时间】:2018-08-07 01:43:02
【问题描述】:

我的 pl/sql 代码有问题。 这是问题: 当我尝试使用 tns(用于远程数据库连接)进行正常插入时,一切正常

     insert into cell@DB2 (code) values(2);
但是当我在我的 pl sql 代码的循环中使用相同的插入时,我得到

ORA-06512:36 号线 02069. 00000 - “此操作的 global_names 参数必须设置为 TRUE” *原因:需要对语句进行远程映射,但无法实现 因为 global_names 应该设置为 TRUE 才能实现 *行动:如果可能,发出 alter session set global_names = true

问题是当我将 global_names 设置为 true 时出现此错误

  1. 00000 - “数据库链接 %s 连接到 %s” *原因:连接到具有不同名称的数据库的数据库链接。 连接被拒绝。 *Action:创建一个与它同名的数据库链接 连接或设置 global_names=false。

所以要么我不能使用 tns 并将 global_names 设置为 true,要么将 global_names 设置为 false 并且我不能使用循环插入

感谢您的帮助

【问题讨论】:

    标签: database oracle plsql insert tns


    【解决方案1】:

    这是你使用的真实代码吗?

    在我看来,我是这样做的:经常我必须从不同的数据库中收集数据,并使用数据库链接将值插入到目标中。要插入的值之一是通过打包函数获取的,所以 - 如果我尝试这样做:

    begin
      insert into table@dblink (dp) values (pkg_ob.f_dp);
    end;
    

    我得到了和你一样的错误。因此,我声明一个局部变量,将函数值放入其中并插入一个局部变量:

    declare
      l_dp number := pkg_ob.f_dp;
    begin
      insert into table@dblink (dp) values (l_dp),
    end;
    

    或者,另一种选择:如果无法完成上述操作(因为函数值不是“静态的”,而是取决于每一行),我创建一个本地表,将值插入其中,然后 - 一旦一切就绪完成 - 我通过数据库链接将本地表的值“复制”到其中:

    创建表my_table(dp号,other_columns_here);

    begin
      insert into my_table (dp, other_columns_here) 
        select pkg_ob.dp(some_id), other_columns_here
        from ...;
    
      insert into my_table@dblink select * from my_table;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2022-09-26
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      相关资源
      最近更新 更多