sql >> Base de Datos >  >> RDS >> Oracle

Función de Oracle para actualizar una tabla, si el registro es nulo, INSERTAR

Todo lo que necesitas es MERGE declaración. Ambos requisitos se pueden realizar de una sola vez.

La sintaxis es -

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

Actualizar Ejemplo para mostrar la cláusula USING para parámetros de procedimiento

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

Úselos como s.hm, s.pn, s.cn, s.ouq

Actualización 2 Un caso de prueba completo

Digamos que tengo una tabla emp1 sin filas. Creo un procedimiento que toma ename como INPUT, que usaré para insertar en emp tabla usando 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>

Veamos si se insertó el valor.

SQL> SELECT ename FROM emp1;

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

SQL>