2017-10-15 8 views
0

Je dois créer une instruction select dans le déclencheur post_insert. Est-ce possible si oui alors comment? Je veux vérifier un autre enregistrement de table s'il existe alors il le mettra à jour sinon insérer comme nouvel enregistrement. S'il vous plaît aider.Formulaires 6i si l'enregistrement existe, puis mise à jour

Mon code de bloc est que je veux courir

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

S'il vous plaît aider à ce sujet –

Répondre

0

Vous ne dit ce qui est arrivé lors de l'exécution de ce code.

Quoi qu'il en soit: exigence que vous avez mentionné (« si elle existe, elle mettra à jour insérer autrement ») ressemble à une excellente candidat pour une instruction MERGE (aussi appelé upsert, comme une combinaison de UPdate et insérons).

Comme Forms 6i est un vieux logiciel, je suis à peu près sûr que MERGE ne peut pas être utilisé directement ici. Toutefois, si la base de données sous-jacente est au moins 9i, MERGE fonctionnera: créez une procédure stockée contenant MERGE et transmettez les valeurs des éléments de formulaire en tant que paramètres.

Voici un exemple (tiré de here, jetez un oeil pour plus d'exemples que je suis paresseux pour créer mon propre code.):

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);