Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle Function per aggiornare una tabella, se il record è null, INSERT

Tutto ciò di cui hai bisogno è UNISCI dichiarazione. Entrambe le tue esigenze possono essere soddisfatte in una volta sola.

La sintassi è -

MERGE INTO table_a a
  USING table_b b
    ON (a.column= b.column)
  WHEN MATCHED THEN
    UPDATE SET a.column= b.column
  WHEN NOT MATCHED THEN
    INSERT (column1, column2)
    VALUES (b.val1, b.val2);

Aggiorna Esempio per mostrare la clausola USING per i parametri della procedura

USING(
SELECT
p_HEAD_MARK hm, 
p_PROJECT_NAME pn, 
p_COLI_NUM cn, 
p_ONSITE_UPD_QTY ouq
FROM DUAL) s

Usali come s.hm, s.pn, s.cn, s.ouq

Aggiorna 2 Un banco di prova completo

Diciamo che ho una tabella emp1 senza righe. Creo una procedura che accetta ename come INPUT, che userò per inserire in emp tabella utilizzando MERGE .

SQL> SELECT * FROM emp1;

no rows selected

SQL>
SQL> CREATE OR REPLACE
  2  PROCEDURE p(
  3      p_ename IN VARCHAR2)
  4  AS
  5  BEGIN
  6    MERGE INTO emp1 e USING
  7    (SELECT p_ename AS ename FROM dual
  8    ) s ON(e.ename = s.ename)
  9  WHEN MATCHED THEN
 10    UPDATE SET e.empno = 100 WHEN NOT MATCHED THEN
 11    INSERT
 12      (ename
 13      ) VALUES
 14      (s.ename
 15      );
 16  END;
 17  /

Procedure created.

SQL>
SQL> sho err
No errors.
SQL>
SQL> BEGIN
  2    p('SCOTT');
  3  END;
  4  /

PL/SQL procedure successfully completed.

SQL>

Vediamo se il valore è stato inserito.

SQL> SELECT ename FROM emp1;

ENAME
----------
SCOTT

SQL>