场景:
在本地数据库表A端通过dblink操作远程数据库表B:
insert into B@dblink (select A.* from A),并且A.* 中有使用A端数据库的函数
此时会报错:
ORA-02069:此操作的global_names 参数必须设置为TRUE
网上查了很多资料,都是以下两种解决方案:
1.在远程数据库上创建相同函数,然后在调用的时候 使用远程数据库上的函数
2.通过sql语句:alter session set GLOBAL_NAMES = true; 设置GLOBAL_NAMES参数为true,并将A和B的GLOBAL_NAMES值置相同。
个人亲测,以上两种方案都不能解决问题,至少对我本地没有效果,报错依旧
最后在这里提供我们最终的解决方案:
1,首先在A端创建和B数据库一样的表结构(不要数据,只要表结构)
EXECUTE IMMEDIATE 'create GLOBAL TEMPORARY table ' || cur.c_Tablename ||
' ON COMMIT DELETE ROWS as select * from ' || cur.c_Tablename ||'@DBLink_To_B where 1<>1';
2.再将数据插入到在A端创建的和B一样的表中,暂且叫她B1.
3.再使用insert into B@dblink (select B1.* from B)
至此可以完美避开在操作远端数据库时直接使用函数,完美解决问题