利用觸發器和INSERT INTO …SELECT…解決Oracle 資料匹配問題

來源:互聯網
上載者:User

情況是這樣有兩個表
一個是物料表
CREATE TABLE "MMS_MATERIAL"
   ( "MATE_ID" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_CODE" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_TYPE" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_NAME" NVARCHAR2(50) NOT NULL ENABLE,
 "MANUFACTORY" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_STYLE" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_DESC" NVARCHAR2(500) NOT NULL ENABLE,
 "MATE_UOM" NVARCHAR2(20) NOT NULL ENABLE,
 "PRICE" NUMBER(10,2) NOT NULL ENABLE,
 "MATE_CLASS" CHAR(2),
 "MATE_USE" CHAR(2),
 "BUY_STYLE" CHAR(2),
 "MATE_STATE" NUMBER(10,0),
 "EFFECT_BGN_DATE" DATE,
 "EFFECT_END_DATE" DATE,
 "MATE_USE_SUB" CHAR(2)
   )
 
 一個是庫存總表
 CREATE TABLE "MMS_INVENTORY"
   ( "INVENTORY_ID" NVARCHAR2(50) NOT NULL ENABLE,
 "MATE_ID" NVARCHAR2(50) NOT NULL ENABLE,
 "QTY" NUMBER(10,0)
   )
主鍵都是用GUID。

我希望在insert一條物料時,同時insert一條QTY為0的物料記錄到INVENTORY表,由於程式員一開始沒有考慮到這一點,結果導致物料表的一些記錄不在庫存總表裡。但這樣,總不是辦法,又不想把物料全刪了重建。

後來,想到利用子查詢。但庫存主鍵是GUID,於是想到了利用觸發器,在PHPBB裡看到過。

觸發器如下:
CREATE OR REPLACE TRIGGER ai_mms_inventory
BEFORE INSERT ON mms_inventory
FOR EACH ROW WHEN (
 new.inventory_id IS NULL OR new.inventory_id = 0
)
BEGIN
 SELECT SYS_GUID()
 INTO :new.inventory_id
 FROM dual;
END;

SQL語句如下:

INSERT INTO mms_inventory(mate_id, qty) 
(
SELECT mate_id, 0 FROM mms_material where mate_id  not in
(select mate_id from mms_inventory))

這樣就解決於資料匹配的問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.