首页 > 解决方案 > 用于检查两个不同数据库 PL/SQL 的两个表中的匹配记录的存储过程

问题描述

我的任务是在 Oracle DB 中创建存储过程。给定两个不同的数据库 DB1 和 student_lookup 表和 DB2 和 student_master 表。SP 需要检查 DB1.student_lookup 表中是否存在 DB2.student_master 的记录。

  1. 如果记录存在于 DB1 中,则不要执行任何操作
  2. 如果 DB1 中不存在该记录,则从 DB2 添加
  3. 如果记录在 DB1 但不在 DB2 中,则更新该记录并将 partition_key 列设置为 1。

任何帮助将不胜感激。我对 Oracle DBA 完全陌生。

标签: databaseoracleplsql

解决方案


如果是两个用户使用:

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 中。


推荐阅读