Oracle数据库,关于关联两张表更新问题

Oracle数据库,关于关联两张表更新问题,第1张

两表关联更新用如下方法。

有以下两张表:

根据test2表中的id和test1表中的id关联,修改test1表中name字段,语句如下:

update test1 a set a.name=(select b.name from test2 b where a.id=b.id) where a.id in (select id from test2)

更新后,test1表中结果:

*** 作步骤如下:

准备数据:在excel中构造出需要的数据

2.将excel中的数据另存为文本文件(有制表符分隔的)

3.将新保存到文本文件中的数据导入到pl*sql中

在pl*sql中选择tools-->text

importer,在出现的窗口中选择"Data

from

Textfile",然后再选择"Open

data

file",

在d出的文件选择框中选中保存有数据的文本文件,此时将会看到data

from

textfile中显示将要导入的数据

4.在configuration中进行如下配置

注:如果不将"Name

in

header"勾选上会导致字段名也当做记录被导入到数据库中,从而导致数据错误

5.点击data

to

oracle,选择将要导入数据的表,并在fields中将文本中的字段与表中的字段进行关联

6.点击import按钮进行导入

7.查看导入的数据

OK,至此数据导入成功。

这个其实最好是做stream,这样可以保证同步更新。但是如果为了一张表做stream看起来又有些不那么值当。

dblink无法远程提交,我只能勉强提出一个方案供参考。

首先数据库AB间互相建立dblink;也就是两个dblink(A到B,B到A)

另外A数据库连接B数据库,所用的B数据库的用户是一个特殊的用户,除了这个dblink以外,其他的地方根本用不到的。

B到A的触发器则只需要读取权限就可以了。

在数据库A上建立触发器,after insert后触发,触发的内容是利用dblink登陆B数据库,登陆后随便查询个什么,都可以然后退出登陆。(直接退出也可以,主要是怕数据库记录不到登陆,登陆触发器有时似乎不那么好用,如果实在不好用可以在这个特殊用户 建立一张表,然后每次登陆都drop这张表,用drop触发器,这个没问题)

B数据库建立一个登陆触发器(或drop触发器),只要那个特殊用户登陆,那么就启动,就是查询A数据库的表a,然后更新表b,然后提交。如果是drop或create触发器,别忘了再重新create和drop,不然表会越来越多或者无表drop。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9636184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存