【INSERT】在INSERT插入語句中引入條件限制選項實現資料插入控制

secooler發表於2011-09-05
  Oracle的insert插入語句的功能很是強大,我們可以實現在插入的過程中僅允許插入指定的資料記錄,功能展示在此,供參考。

1.環境準備
1)建立T表
sec@ora10g> create table t (x number, y number);

Table created.

2)初始化兩條資料,用於後續插入語句比對
sec@ora10g> insert into t values (1,null);

1 row created.

sec@ora10g> insert into t values (2,2000);

1 row created.

sec@ora10g> select * from t;

         X          Y
---------- ----------
         1
         2       2000

2.嘗試使用帶限制條件的插入語句
1)以下兩條SQL插入語句是符合條件的例子
這裡我們使用的是“with check option”選項限制插入T表時Y列值只允許是3000或4000。
sec@ora10g> insert into (select * from t where y in (3000,4000) with check option) values(3,3000);

1 row created.

sec@ora10g> insert into (select * from t where y in (3000,4000) with check option) values(4,4000);

1 row created.

sec@ora10g> select * from t;

         X          Y
---------- ----------
         1
         2       2000
         3       3000
         4       4000

上面兩條資料符合插入條件,插入成功。

2)嘗試插入不符合條件的資料
sec@ora10g> insert into (select * from t where y in (3000,4000) with check option) values(5,5000);
insert into (select * from t where y in (3000,4000) with check option) values(5,5000)
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation

sec@ora10g> select * from t;

         X          Y
---------- ----------
         1
         2       2000
         3       3000
         4       4000

顯然,在這種約束條件下,我們是無法插入Y值不等於3000和4000的資料的。

3)去掉“with check option”選項再次嘗試資料插入
sec@ora10g> insert into (select * from t where y in (3000,4000)) values(5,5000);

1 row created.

sec@ora10g> select * from t;

         X          Y
---------- ----------
         1
         2       2000
         3       3000
         4       4000
         5       5000

此時插入資料的約束已取消。資料可以成功插入到T表中。

3.小結
  本文給出了一種插入資料的特殊用法,目的是提醒大家,我們在使用常規插入技術的同時還有很多新奇的方法值得探索。

Good luck.

secooler
11.09.05

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-706706/,如需轉載,請註明出處,否則將追究法律責任。

相關文章