2017-08-29 42 views
0

我有一个SP,其中我已将inserting记录的逻辑写入表中。但是现在如果用户再次输入记录_对于相同的SAP_ID,则我想更新该记录。如果在PL中再次输入相同SAP_ID的数据,则更新表SQL

那么如何再次添加相同的SAP_ID更新记录?

下面是我的存储过程: -

PROCEDURE INSERT_INTO_EXIST_SAPID 
    (
P_SAPID IN NVARCHAR2, 
P_VENDOR_NAME IN NVARCHAR2, 
P_ODU_MODEL IN NVARCHAR2, 
P_ANT_MODEL IN NVARCHAR2, 
P_OMT_MODEL IN NVARCHAR2, 
P_QUANTITY IN NVARCHAR2, 
P_CREATED_BY IN NVARCHAR2, 
P_CREATED_DATE IN NVARCHAR2, 
P_IS_EXISTSAP IN CHAR, 
PREQUEST_ID OUT NUMBER  
) 

AS BEGIN 

INSERT INTO UBR_STRUCTURE_DETAILS 
            (
            RJ_SAPID, 
            VENDOR_NAME, 
            ODU_EQP_MODEL, 
            ANT_EQP_MODEL, 
            OMT_EQP_MODEL, 
            MODEL_COUNT, 
            CREATED_USER, 
            CREATED_DATE, 
            EXIST_SAPID 
           ) 
     VALUES 

           (
            P_SAPID, 
            P_VENDOR_NAME, 
            P_ODU_MODEL, 
            P_ANT_MODEL, 
            P_OMT_MODEL, 
            P_QUANTITY, 
            P_CREATED_BY, 
            SYSDATE, 
            P_IS_EXISTSAP 
           )returning REQUEST_ID INTO PREQUEST_ID; 
END INSERT_INTO_EXIST_SAPID; 

回答

2

你可以使用MERGE声明:

MERGE INTO UBR_STRUCTURE_DETAILS trg 
USING (SELECT P_SAPID, 
       P_VENDOR_NAME, 
       P_ODU_MODEL, 
       P_ANT_MODEL, 
       P_OMT_MODEL, 
       P_QUANTITY, 
       P_CREATED_BY, 
       SYSDATE, 
       P_IS_EXISTSAP 
     FROM dual) src 
    ON trg.<col_to_match> = src.<col_to_match> 
WHEN MATCHED THEN 
     UPDATE SET 
      col_name = src.col_name 
WHEN NOT MATCHED THEN 
     INSERT (col_list) 
     VALUES (...); 
+0

是什么意思吗? ' = src。'你在比较唯一的列进行更新吗? – BNN

+0

@VVVV我指的是唯一标识行的列,在您的情况下可能是'RJ_SAPID'和'P_SAPID' – lad2025

相关问题