oracle 两个一样的表数据该同步

有两张表:tb_123sztb_789gz字段如下:ORDER_NOVARCHAR2(12)notnull,KIJUN_YMVARCHAR2(6)notnull,RECP... 有两张表:tb_123sz tb_789gz
字段如下:
ORDER_NO VARCHAR2(12) not null, KIJUN_YM VARCHAR2(6) not null, RECP_KBN VARCHAR2(2) not null, SEQ NUMBER(2) not null, SALE_ORGCD VARCHAR2(6), SALE_TEAMCD VARCHAR2(6), SALE_EMPNO VARCHAR2(6), INCOME_ORGCD VARCHAR2(6), INCOME_TEAMCD VARCHAR2(6), INCOME_EMPNO VARCHAR2(6), SALE_KBN VARCHAR2(2), GOODS_CD VARCHAR2(11), CONT_MONTH VARCHAR2(2), OPTION_KBN VARCHAR2(2), PAY_CNT VARCHAR2(2), RECP_METHOD VARCHAR2(2), RECP_TYPE VARCHAR2(2), TARGET_AMT NUMBER(11,2), RECP_AMT NUMBER(11,2), DELAY_AMT NUMBER(11,2), RECP_YN VARCHAR2(1), RECP_DT VARCHAR2(8), COMM_APPYM VARCHAR2(6), USER_ID VARCHAR2(6), SYS_DT DATE, RECP_TGTAMT NUMBER(11,2), REMARK VARCHAR2(300), PRERECP_AMT NUMBER(11,2), KIJUN_YMD VARCHAR2(8), PRECHG_AMT NUMBER(11,2), TARGET_KBN VARCHAR2(2), PRE_SEQ NUMBER(2), CLOSE_YM VARCHAR2(6), RECV_EMPNO VARCHAR2(6), RECV_ORGCD VARCHAR2(6), IFSEND_DT VARCHAR2(8), IFPROCAN_YN VARCHAR2(1), BPL_CD VARCHAR2(2), DIMENSION1 VARCHAR2(2), DIMENSION2 VARCHAR2(20), DIMENSION3 VARCHAR2(2), DIMENSION4 VARCHAR2(2), DOC_NO VARCHAR2(20), SLIP_NO VARCHAR2(12)

现在是想把tb_789gz里面的数据覆盖到tb_123里面去。

想把里面字段的数据复制进去。如果没有则插入..
-----------------------------------------------------------
实就是想把这些字段更新
----------------------------------------------------------
a.TARGET_AMT=b.TARGET_AMT,a.RECP_AMT=b.RECP_AMT,a.DELAY_AMT=b.DELAY_AMT,a.CLOSE_YM=b.CLOSE_YM,a.INCOME_ORGCD=b.INCOME_ORGCD,a.income_empno=b.income_empno,a.recp_dt=b.recp_dt,a.comm_appym=b.comm_appym,a.Sys_Dt=b.Sys_Dt,a.prerecp_AMT=b.prerecp_AMT,a.prechg_amt=b.prechg_amt,a.doc_no=b. doc_no, a.slip_no=b.slip_no;
---------------------------------------------------------------
展开
 我来答
匿名用户
推荐于2017-12-15
展开全部

使用  MERGE  语句, 可以实现,   如果存在, 则更新,  不存在, 则插入的处理.

 

我看了看,   你那里也是这么用的.

 

问题估计是出在,  你那里 

 

WHEN MATCHED THEN UPDATE SET  ....  

后面多了一个分号。

 

导致 语句执行结束了。

 

 

 

-- 源表
CREATE TABLE test_from (id INT, val VARCHAR(20));
-- 目标表
CREATE TABLE test_to (id INT, val VARCHAR(20));
-- 插入源表
INSERT INTO test_from VALUES (1, 'A');
INSERT INTO test_from VALUES (2, 'B');
-- 合并 源表到目标表
MERGE INTO test_to 
USING test_from
ON ( test_to.id = test_from.id )    -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val   -- 匹配的时候,更新
WHEN NOT MATCHED THEN INSERT VALUES(test_from.id, test_from.val) -- 源表有,目标表没有,插入

-- 第一次检查 目标表数据.
SQL> SELECT * FROM test_to;
        ID VAL
---------- --------------------
         1 A
         2 B
-- 更新源表
UPDATE test_from SET val = 'A2' WHERE id = 1;
-- 删除源表
DELETE FROM test_from WHERE id = 2;
-- 插入源表
INSERT INTO test_from VALUES (3, 'C');

-- 合并 源表到目标表
MERGE INTO test_to 
USING test_from
ON ( test_to.id = test_from.id )    -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val   -- 匹配的时候,更新
WHEN NOT MATCHED THEN INSERT VALUES(test_from.id, test_from.val) -- 源表有,目标表没有,插入

-- 再次检查 目标表数据.
SQL> SELECT * FROM test_to;
        ID VAL
---------- --------------------
         1 A2
         2 B
         3 C
更多追问追答
追问
他现在报错ORA-30926:unable to get a stable set of rows in the tables
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式