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;
--------------------------------------------------------------- 展开
字段如下:
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;
--------------------------------------------------------------- 展开
1个回答
推荐于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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询