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

Oracle Funktion til at opdatere en tabel, hvis posten er null, så INSERT

Alt du behøver er FLET udmelding. Begge dine krav kunne udføres på én gang.

Syntaksen er -

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

Opdater Eksempel til at vise USING-sætning for procedureparametre

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

Brug disse som s.hm, s.pn, s.cn, s.ouq

Opdatering 2 En komplet testcase

Lad os sige, at jeg har en tabel emp1 uden rækker. Jeg opretter en procedure, der tager ename som INPUT, som jeg vil bruge til at indsætte i emp tabel ved hjælp af FLET .

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>

Lad os se, om værdien er blevet indsat.

SQL> SELECT ename FROM emp1;

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

SQL>



  1. SQL Server 2008 + PCI-overholdelse? Vedrører PCI, såvel som symmetriske nøgler!

  2. Postgres FK, der refererer til komposit PK

  3. Php, Mysql Vælg fra tabel, hvor række =? det er muligt?

  4. MySQL - hentning af en HTML-tabel fra databasen - omvendte skråstreger før anførselstegn