2017-10-15 2 views
0

post_insertトリガーでselect文を作成する必要があります。それが可能ならはい? 別のテーブルレコードをチェックしたい場合はそれを更新し、そうでない場合は新しいレコードとして挿入します。助けてください。フォーム6iレコードが存在する場合は更新

マイブロックコードは、私はあなたがそのコードを実行したときに何が起こったのか言ったことはありません

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

はこのトピックを助けてください –

答えて

0

を実行したいということです。とにかく

:あなたが言及した要件(「それが存在する場合、それがそうでなければそれを更新挿入します」)は、MERGE文の優れた候補(また、UPDATEおよびINSERTの組み合わせとして、 UPSERT と呼ばれる)のように見えます。

フォーム6iは古いソフトウェアであるため、MERGEを直接使用することはできません。ただし、基になるデータベースが少なくとも9iであれば、MERGEが動作します.MERGEを含むストアドプロシージャを作成し、フォームアイテムの値をパラメータとして渡します。ここで

は例です(hereから取られ、より多くの例について見て私は自分自身のコードを作成する怠け者。):

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); 
関連する問題