sql >> Databáze >  >> RDS >> Oracle

Oracle Function pro aktualizaci tabulky, pokud je záznam prázdný, pak INSERT

Vše, co potřebujete, je SLOUČIT tvrzení. Oba vaše požadavky lze splnit najednou.

Syntaxe je -

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

Aktualizovat Příklad pro zobrazení klauzule USING pro parametry procedury

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

Použijte je jako s.hm, s.pn, s.cn, s.ouq

Aktualizace 2 Kompletní testovací případ

Řekněme, že mám tabulku emp1 bez řádků. Vytvořím proceduru, která vezme ename jako INPUT, který použiji pro vložení do emp tabulky pomocí SLOUČIT .

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>

Podívejme se, zda byla vložena hodnota.

SQL> SELECT ename FROM emp1;

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

SQL>



  1. Chyba SQL:ORA-00933:Příkaz SQL nebyl správně ukončen

  2. Jak mohu urychlit dotaz MySQL pomocí klauzulí WHERE ve dvou sloupcích?

  3. Smyčka přes mysql_fetch_array v PHP

  4. Podmínka MySQL WHERE v proceduře byla ignorována