情況是這樣有兩個表
一個是物料表
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))
這樣就解決於資料匹配的問題。