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

Cập nhật với sau khi chèn trình kích hoạt trên cùng một bảng

Nếu bạn muốn chỉ định một giá trị mặc định đơn giản, cách dễ nhất là khai báo giá trị đó trên bảng, sử dụng mệnh đề DEFAULT.

SQL> create table t42
  2    ( col1 number default 1 not null
  3      , col2 date)
  4  /

Table created.

SQL> insert into t42 (col2) values (sysdate)
  2  /

1 row created.

SQL> select * from t42
  2  /

      COL1 COL2
---------- ---------
         1 03-AUG-11

SQL>

Điều này hoạt động với các ký tự hoặc cột giả như SYSDATE hoặc USER. Nếu bạn muốn lấy một giá trị phức tạp hơn với một hàm hoặc một trình tự do người dùng xác định, bạn sẽ cần sử dụng trình kích hoạt.

Đây là phiên bản mới của bảng ...

SQL> create table t42
  2    ( col1 number default 1 not null
  3      , col2 date default sysdate
  4      , col3 varchar2(30) default user
  5      , col4 number )
  6  /

Table created.

SQL>

... với một trình kích hoạt:

SQL> create or replace trigger t42_trg
  2      before insert or update
  3      on t42
  4      for each row
  5  begin
  6      if :new.col4 is null
  7      then
  8          :new.col4 := my_seq.nextval;
  9      end if;
 10  end;
 11  /

Trigger created.

SQL> insert into t42 (col1, col2, col3)
  2  values (99, sysdate, 'MR KNOX')
  3  /

1 row created.

SQL> select * from t42
  2  /

      COL1 COL2      COL3                                 COL4
---------- --------- ------------------------------ ----------
        99 03-AUG-11 MR KNOX                               161

SQL>

Lưu ý rằng mặc dù mọi cột trên bảng đều có thể mặc định, nhưng tôi phải điền ít nhất một cột để làm cho SQL hợp lệ:

SQL> insert into t42 values ()
  2  /
insert into t42 values ()
                        *
ERROR at line 1:
ORA-00936: missing expression


SQL>

Nhưng tôi có thể chuyển NULL sang COL4 để có được bản ghi hoàn toàn mặc định:

SQL> insert into t42 (col4) values (null)
  2  /

1 row created.

SQL> select * from t42
  2  /

      COL1 COL2      COL3                                 COL4
---------- --------- ------------------------------ ----------
        99 03-AUG-11 MR KNOX                               161
         1 03-AUG-11 APC                                   162

SQL>

Báo trước:trình kích hoạt của tôi sử dụng cú pháp 11g mới. Trong các phiên bản trước, chúng ta phải gán giá trị trình tự bằng câu lệnh SELECT:

select my_seq.nextval
into :new.col4
from dual;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy Vùng múi giờ từ SQLPLUS?

  2. làm thế nào để sử dụng regexp_like của Oracle trong Hibernate HQL?

  3. Cách tìm các bản ghi có phạm vi ngày trùng lặp đệ quy trong Oracle DB

  4. Hàm COALESCE () trong Oracle

  5. Khi nào dữ liệu trong bảng tạm thời của phiên Oracle sẽ bị xóa?