Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi Oracle untuk memperbarui tabel, jika catatannya nol maka INSERT

Yang Anda butuhkan hanyalah MERGE penyataan. Kedua kebutuhan Anda dapat dilakukan sekaligus.

Sintaksnya adalah -

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

Perbarui Contoh untuk menampilkan klausa USING untuk parameter prosedur

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

Gunakan ini sebagai s.hm, s.pn, s.cn, s.ouq

Perbarui 2 Kasus uji lengkap

Katakanlah saya punya tabel emp1 tanpa baris. Saya membuat prosedur yang mengambil ename sebagai INPUT, yang akan saya gunakan untuk memasukkan ke emp tabel menggunakan 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>

Mari kita lihat apakah nilainya dimasukkan.

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. ambil dari fungsi mengembalikan kursor ref untuk merekam

  2. OracleConnection melempar pengecualian kosong

  3. Menggunakan subquery dalam pernyataan Periksa di Oracle

  4. Mengoptimalkan ukuran pengambilan JDBC dengan menggunakan application.properties Spring Boots

  5. Masukkan ke dengan serikat semua dan nextval tidak berfungsi dengan nilai duplikat