最經要merge要將資料庫A中名為'yyjg.chinese_prescription'表更新到資料庫B中名為'chinese_prescription'表,兩張表的欄位名稱、資料型別一樣,但B表有設定的有外鍵,現在更新插入到資料庫B中chinese_prescription表時,提示有ORA-02291錯誤(違反完整約束條件),然后我用了 log errors into err_a ('merge') reject limit unlimited(在這之前已用dbms_errlog創建了名為err_a的錯誤日志表),但是日志里沒有資料,我寫的陳述句大致如下:
merge into chinese_prescription a
using(select * from yyjg.chinese_prescription) b
on (a.prescribe_serial_no =b.prescribe_serial_no
and a.settlement_sn=b.settlement_sn
and A.OUTPATIENT_NO=B.OUTPATIENT_NO)
WHEN MATCHED THEN
UPDATE SET
A.ESTATUS=B.ESTATUS,
a.CLINIC_ORGAN_NAME=B.CLINIC_ORGAN_NAME,
A.CLINIC_DEPT_CODE=B.CLINIC_DEPT_CODE,
WHEN NOT MATCHED THEN
INSERT(A.ESTATUS,
A.CLINIC_ORGAN_CODE,
A.CLINIC_ORGAN_NAME,
A.CLINIC_DEPT_CODE,
A.CLINIC_DEPT_NAME,
A.PATIENT_LOCAL_ID,
A.PRESCRIBE_SERIAL_NO,
A.PRESCRIBE_NO,
A.PRESCRIPTION_NOTE_INF,
A.PRESCRIPTION_DRUG_PHARM_SIG,
A.PRESCRIPTION_CHECK_SIG
)
VALUES
(
B.ESTATUS,
B.CLINIC_ORGAN_CODE,
B.CLINIC_ORGAN_NAME,
B.CLINIC_DEPT_CODE,
B.CLINIC_DEPT_NAME,
B.PATIENT_LOCAL_ID,
B.PRESCRIBE_SERIAL_NO,
B.PRESCRIBE_NO,
B.PRESCRIPTION_NOTE_INF,
B.PRESCRIPTION_DRUG_PHARM_SIG,
B.PRESCRIPTION_CHECK_SIG
)
log errors into err_a('merge') reject limit unlimited;
(由于欄位太多我就只寫了一部分,其中被設定為外鍵的欄位是CLINIC_ORGAN_CODE和PATIENT_LOCAL_ID
這兩個欄位在UPDATE中我沒有加入更新,只在insert中有)
我想問的問題:
1按照功能介紹,使用log errors into可以記錄錯誤并跳過繼續執行.為什么提示ORA-02291時我的err_a中沒有錯誤記錄?
2.因為可能有部分資料違反外鍵規則,除了修改資料庫B中的表結構,還有什么辦法可以跳過出問題的資料,繼續執行陳述句直到更新完成?
3.是不是可以用sql陳述句寫出類似于kettle中的插入\更新模塊的功能,如果有那應該怎么寫?[/color]
求路過大神幫忙看看,能回答我的其中一個問題我感激不盡·,現在百度已經無法拯救我了



轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/270150.html
標籤:基礎和管理
