使用tns

时间:2018-02-27 11:59:50

标签: database oracle plsql insert tns

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

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

  

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

问题是,当我将global_names设置为true时,我收到此错误

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

所以要么我不能使用tns并将global_names设置为true或将global_names设置为false而我无法使用循环插入

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

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

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

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;

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

create table my_table(dp number,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;