Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja Oracle do aktualizacji tabeli, jeśli rekord ma wartość NULL, to INSERT

Wszystko czego potrzebujesz to MERGE oświadczenie. Oba Twoje wymagania można wykonać za jednym razem.

Składnia to -

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

Aktualizacja Przykład pokazujący klauzulę USING dla parametrów procedury

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

Użyj ich jako s.hm, s.pn, s.cn, s.ouq

Aktualizacja 2 Kompletny przypadek testowy

Załóżmy, że mam tabelę emp1 bez wierszy. Tworzę procedurę, która przyjmuje ename jako INPUT, którego użyję do wstawienia do emp tabela przy użyciu 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>

Zobaczmy, czy wartość została wstawiona.

SQL> SELECT ename FROM emp1;

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

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz listę argumentów z wartością domyślną

  2. Sekcja inicjowania pakietu

  3. Co powoduje różnicę między czasem procesora a czasem, który upłynął w plikach Oracle tkprof?

  4. jak powielić moje wyniki sql?

  5. Lista kluczy obcych i tabel, do których się odwołują w Oracle DB