database - 用于检查两个不同数据库 PL/SQL 的两个表中的匹配记录的存储过程
问题描述
我的任务是在 Oracle DB 中创建存储过程。给定两个不同的数据库 DB1 和 student_lookup 表和 DB2 和 student_master 表。SP 需要检查 DB1.student_lookup 表中是否存在 DB2.student_master 的记录。
- 如果记录存在于 DB1 中,则不要执行任何操作
- 如果 DB1 中不存在该记录,则从 DB2 添加
- 如果记录在 DB1 但不在 DB2 中,则更新该记录并将 partition_key 列设置为 1。
任何帮助将不胜感激。我对 Oracle DBA 完全陌生。
解决方案
如果是两个用户使用:
MERGE INTO db1.student_lookup a
USING
(select * from db2.student_mater) b
ON (
a.id = b.id
AND <others join column>
)
WHEN MATCHED THEN UPDATE SET a.partition_key = 1
WHEN NOT MATCHED THEN INSERT (<a.column>)
VALUES (<b.column>)
如果是两个分贝:
CREATE DATABASE LINK DBLINK_DB1_DB2
CONNECT TO DB2 IDENTIFIED BY <ENTER USER PASSWORD HERE>
USING '<FROM tnsnames>'
MERGE INTO db1.student_lookup a
USING
(select * from "student_mater"@"DBLINK_DB1_DB2") b
ON (
a.id = b.id
AND <others join column>
)
WHEN MATCHED THEN UPDATE SET a.partition_key = 1
WHEN NOT MATCHED THEN INSERT (<a.column>)
VALUES (<b.column>)
如果您将 SP 简单地添加到您的 SP 中。