Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle Hàm để cập nhật một bảng, nếu bản ghi là null thì INSERT

Tất cả những gì bạn cần là MERGE bản tường trình. Cả hai yêu cầu của bạn đều có thể được thực hiện cùng một lúc.

Cú pháp là -

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

Cập nhật Ví dụ để hiển thị mệnh đề USING cho các tham số thủ tục

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

Sử dụng chúng dưới dạng s.hm, s.pn, s.cn, s.ouq

Cập nhật 2 Một trường hợp thử nghiệm hoàn chỉnh

Giả sử tôi có một bảng emp1 không có hàng. Tôi tạo một thủ tục lấy ename dưới dạng INPUT, mà tôi sẽ sử dụng để chèn vào emp bảng sử dụng 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>

Hãy xem liệu giá trị có được chèn không.

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. Oracle:Sự khác biệt giữa các kết nối không gộp chung và DRCP

  2. Cách kết nối với cơ sở dữ liệu Oracle 11 từ. mạng

  3. Thủ tục PL / SQL - quá nhiều giá trị

  4. cách sử dụng ràng buộc kiểm tra trong oracle

  5. Tương đương với bảng Oracle Dual trong MS SqlServer là gì?