Forms 6i if record exists then update

时间:2017-10-15 01:51:39

标签: oracle11g oracle10g oracleforms

I need to create select statement in post_insert trigger. Is it possible if yes then how? I want to check another table records if it exists then it will update it otherwise insert as new record. Please help.

My block code is that i want to run

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;

1 个答案:

答案 0 :(得分:0)

您从未说过运行该代码时发生的事情。

无论如何:你提到的要求(&#34;如果它存在则会更新它,否则插入&#34;)看起来像是MERGE语句的优秀候选者(也称为 upsert ,作为UPdate和inSERT的组合。)

由于Forms 6i是一个旧版软件,我非常确定MERGE不能直接在那里使用。但是,如果底层数据库至少为9i,则MERGE将起作用 - 创建一个包含MERGE的存储过程,并传递表单项&#39;值作为参数。

以下是一个示例(取自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);