sql >> Databasteknik >  >> RDS >> Oracle

Oracle-funktion för att uppdatera en tabell, om posten är null så INSERT

Allt du behöver är SAMMANSLUTNING påstående. Båda dina krav kan göras på en gång.

Syntaxen är -

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

Uppdatera Exempel för att visa USING-satsen för procedurparametrar

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

Använd dessa som s.hm, s.pn, s.cn, s.ouq

Uppdatering 2 Ett komplett testfall

Låt oss säga att jag har en tabell emp1 utan rader. Jag skapar en procedur som tar ename som INPUT, som jag kommer att använda för att infoga i emp tabell med 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>

Låt oss se om värdet har infogats.

SQL> SELECT ename FROM emp1;

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

SQL>



  1. Hur man automatiskt lägger till ett års datum till ett befintligt datum i SQL Server

  2. MySql:BESTÄLL EFTER förälder och barn

  3. MySQL:Välj data från en tabell där datumet infaller i den aktuella veckan och den aktuella månaden

  4. Finns det något sätt att VÄLJA och UPPDATERA rader samtidigt?