2017-10-15 4 views
0

Ich muss Select-Anweisung in Post_insert-Trigger erstellen. Ist es möglich, wenn ja wie? Ich möchte eine andere Tabelle Datensätze überprüfen, wenn es existiert, dann wird es aktualisieren, andernfalls als neuen Datensatz einfügen. Bitte helfen Sie.Formulare 6i, wenn Datensatz existiert, dann Update

Mein Block-Code ist, dass ich

DECLARE 
EXSIST_TYPE varchar2(50); 
EXSIST_NAME varchar2(50); 
EXSIST_COMPANY VARCHAR2(100); 
BEGIN 
SELECT PRO_TYPE, PRO_NAME, COMPANY_NAME INTO EXSIST_TYPE, EXSIST_NAME ,EXSIST_COMPANY FROM STOCK; 
IF 
:PURCHASE_DETAIL.PRO_TYPE <> EXSIST_TYPE AND 
:PURCHASE_DETAIL.PRO_NAME <> EXSIST_NAME AND 
:PURCHASE_DETAIL.COMPANY_NAME <> EXSIST_COMPANY THEN*/ 
IF 
:PURCHASE.RADIO_TYPE = 'PURCHASE' THEN 
INSERT INTO STOCK(
PRO_TYPE  , 
PRO_NAME  , 
COMPANY_NAME , 
QUANTITY  , 
PURCHASE_RATE, 
SALE_RATE , 
RACK_NUM  
) 
VALUES 
(
:PURCHASE_DETAIL.PRO_TYPE, 
:PURCHASE_DETAIL.PRO_NAME, 
:PURCHASE_DETAIL.COMPANY_NAME, 
:PURCHASE_DETAIL.QUANTITY, 
:PURCHASE_DETAIL.PRICE, 
:PURCHASE_DETAIL.SALE_PRICE, 
:PURCHASE_DETAIL.RACK_NUM 
); 
END IF; 
ELSIF 
:PURCHASE_DETAIL.PRO_TYPE = EXSIST_TYPE AND 
:PURCHASE_DETAIL.PRO_NAME = EXSIST_NAME AND 
:PURCHASE_DETAIL.COMPANY_NAME = EXSIST_NAME THEN 
IF 
:PURCHASE.RADIO_TYPE = 'PURCHASE' THEN 
UPDATE STOCK SET 
STOCK.QUANTITY = STOCK.QUANTITY+:PURCHASE_DETAIL.QUANTITY 
WHERE 
STOCK.PRO_TYPE = :PURCHASE_DETAIL.PRO_TYPE AND 
STOCK.PRO_NAME = :PURCHASE_DETAIL.PRO_NAME AND 
STOCK.COMPANY_NAME= :PURCHASE_DETAIL.COMPANY_NAME; 
ELSIF 
:PURCHASE.RADIO_TYPE = 'PRCH_RETURN' THEN 
UPDATE STOCK SET 
STOCK.QUANTITY = STOCK.QUANTITY-:PURCHASE_DETAIL.QUANTITY 
WHERE 
STOCK.PRO_TYPE = :PURCHASE_DETAIL.PRO_TYPE AND 
STOCK.PRO_NAME = :PURCHASE_DETAIL.PRO_NAME AND 
STOCK.COMPANY_NAME = :PURCHASE_DETAIL.COMPANY_NAME; 
END IF; 
END IF; 
END; 
+0

helfen Sie bitte dieses Thema –

Antwort

0

ausführen möchten Sie nie gesagt, was passiert, wenn Sie diesen Code lief.

Wie dem auch sei: Anforderung, die Sie erwähnt („wenn es vorhanden ist, dann wird es aktualisieren es sonst einfügen“) sieht aus wie ein ausgezeichnete Kandidat für eine MERGE-Anweisung (auch Upsert, als eine Kombination von UPdate und einfügen genannt).

Da es sich bei Forms 6i um eine alte Software handelt, bin ich ziemlich sicher, dass MERGE dort nicht direkt verwendet werden kann. Wenn die zugrunde liegende Datenbank jedoch mindestens 9i ist, funktioniert MERGE - erstellen Sie eine gespeicherte Prozedur, die MERGE enthält, und übergeben Sie die Werte der Formularelemente als Parameter.

Hier ist ein Beispiel (aus here genommen, um weitere Beispiele einen Blick Ich bin faul meinen eigenen Code zu erstellen.):

MERGE INTO employees e 
    USING hr_records h 
    ON (e.id = h.emp_id) 
    WHEN MATCHED THEN 
    UPDATE SET e.address = h.address 
    WHEN NOT MATCHED THEN 
    INSERT (id, address) 
    VALUES (h.emp_id, h.address); 
Verwandte Themen