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

Perbarui dengan pemicu setelah memasukkan pada tabel yang sama

Jika Anda ingin menetapkan nilai default sederhana, cara termudah adalah mendeklarasikannya di atas tabel, menggunakan klausa 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>

Ini bekerja dengan literal atau pseudocolumns seperti SYSDATE atau USER. Jika Anda ingin mendapatkan nilai yang lebih rumit dengan fungsi atau urutan yang ditentukan pengguna, Anda perlu menggunakan pemicu.

Ini adalah tabel versi baru...

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>

... dengan pemicu:

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>

Perhatikan bahwa meskipun setiap kolom pada tabel adalah default, saya harus mengisi setidaknya satu kolom untuk membuat SQL valid:

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


SQL>

Tapi saya bisa meneruskan NULL ke COL4 untuk mendapatkan catatan yang sepenuhnya default:

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>

Pemicu peringatan:pemicu saya menggunakan sintaks 11g baru. Di versi sebelumnya kita harus menetapkan nilai urutan menggunakan pernyataan 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. Apakah ada cara untuk membuat Kunci Utama Guid yang bertambah otomatis dalam database Oracle?

  2. Menjatuhkan beberapa kolom:PLSQL dan user_tab_cols

  3. Bagaimana cara menulis kueri yang melakukan sesuatu yang mirip dengan GROUP_CONCAT MySQL di Oracle?

  4. Oracle SQL :stempel waktu di mana klausa

  5. Oracle pl/sql hasil menjadi satu string