Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Funktion zum Aktualisieren einer Tabelle, wenn der Datensatz null ist, dann INSERT

Alles, was Sie brauchen, ist MERGE Aussage. Beide Anforderungen können auf einmal erledigt werden.

Die Syntax ist -

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

Aktualisieren Beispiel zum Anzeigen der USING-Klausel für Prozedurparameter

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

Verwenden Sie diese als s.hm, s.pn, s.cn, s.ouq

Aktualisierung 2 Ein vollständiger Testfall

Nehmen wir an, ich habe eine Tabelle emp1 ohne Reihen. Ich erstelle eine Prozedur, die ename übernimmt als INPUT, die ich zum Einfügen in emp verwenden werde Tabelle mit 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>

Mal sehen, ob der Wert eingefügt wurde.

SQL> SELECT ename FROM emp1;

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

SQL>