使用主键更新不同oracle架构上的两个相同表

时间:2015-02-26 13:02:00

标签: oracle oracle11g sql-update

我正在努力解决这个问题并且性能良好,我们设法通过使用哈希映射在java中找到解决方案,但由于该表包含1L记录,因此很难管理这部分。

我正在寻找最好的选择。

我在同一个oracle数据库上有两个模式。我需要使用主键更新具有另一个模式表的表(如果主键行存在,我们只需要更新,我们不应该插入它。)

假设我的oracle数据库是TEST,我有两个架构的SCHEMA1& SCHEMA2。

SCHEMA1& SCHEMA2包含表SAMPLE1

结构:

ID NUMBER ==> PRIMARY KEY
NAME VARCHAR ==> PRIMARY KEY
LASTNAME VARCHAR ==> NORMAL COLUMN

现在SCHEMA1 SAMPLE1包含以下数据

1) 123 'TEMP' 'TEMPOARY1'
2) 234 'TEMP2' 'TEMPORARY2'
3) 345 'TEMP3' 'TEMPORARY3'

SCHEMA2 SAMPLE1包含以下数据

1) 123 'TEMP' 'TEMP1'
2) 23   'TEMP23 'TEMP2'
3) 235 'TEMP2' 'TEMP3'

现在我的目标是我需要将SCHEMA1的表SAMPLE1与SCHEMA2的SAMPLE1表同步,结果应该在下面。

1) 123 'TEMP' 'TEMP1'
2) 234 'TEMP2' 'TEMPORARY2'
3) 345 'TEMP3' 'TEMPORARY3'

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

 declare

   procedure fncUpdate(pId PLS_INTEGER, pName VARCHAR2 , pLastname VARCHAR2) as
   vIden pls_integer;    
   begin
     UPDATE SCHEMA2.SAMPLE1 set  id, name,lastname  values (pId, pName pLastname)
     returning iden into vIden;

     DBMS_OUTPUT.PUT_LINE('iden : '|| vIden);      
   end fncUpdate;

 begin
    for cur in(
        SELECT id,name,lastname
        FROM  SCHEMA1.SAMPLE1    
      ) 
      loop
        fncUpdate(cur.id,cur.name,cur.lastname);
      end loop;
 end;

答案 1 :(得分:1)

  

在不同的oracle 数据库

上更新两个相同的表      

我有两个架构

我已编辑您的问题标题并将数据库更改为架构。因为,您已在问题正文中明确提到了架构。不要在 DATABASE SCHEMA 之间混淆。我见过SQL Server开发人员经常将模式解释为数据库的相对术语。 模式是属于用户的对象集(表,视图,索引等)。不要在架构和数据库之间混淆。

不需要PL / SQL。在纯SQL中执行。

您可以使用 MERGE 语句。

例如,

MERGE INTO schema2.table2 t2
  USING (SELECT * FROM schema1.table1) t1
ON (t2.primarykey = t1.key)
WHEN MATCHED THEN
  UPDATE SET
t2.column2 = t1.column2
AND t2.column3 = t1.column3
/
相关问题