栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在同一张表上插入触发器后更新

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在同一张表上插入触发器后更新

如果要分配一个简单的默认值,最简单的方法是使用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-11SQL>

这适用于文字或伪列,例如SYSDATE或USER。如果要使用用户定义的函数或序列派生更复杂的值,则需要使用触发器。

这是表格的新版本…

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>

…带有触发器:

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      COL3COL4---------- --------- ------------------------------ ----------        99 03-AUG-11 MR KNOX         161SQL>

请注意,尽管表上的每一列都是默认列,但我必须填充至少一列以使SQL有效:

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

但是我可以将NULL传递给COL4以获得完全默认的记录:

SQL> insert into t42 (col4) values (null)  2  /1 row created.SQL> select * from t42  2  /      COL1 COL2      COL3COL4---------- --------- ------------------------------ ----------        99 03-AUG-11 MR KNOX         161         1 03-AUG-11 APC  162SQL>

警告:我的触发器使用了新的11g语法。在以前的版本中,我们必须使用SELECt语句分配序列值:

select my_seq.nextvalinto :new.col4from dual;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号