首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用此触发器oracle数据库变化表

使用此触发器oracle数据库变化表
EN

Stack Overflow用户
提问于 2013-11-13 16:59:09
回答 3查看 255关注 0票数 1

使用Oracle数据库,需要以小写存储所有行。所有INSERTUPDATE都应该使用小写数据插入和更新行。我写了一个触发器来做。读了很多关于triggers.Very表突变的困惑,这段代码会不会引发突变错误。请在这里写,如果可以的话。

代码语言:javascript
复制
create or replace trigger employee_name
before update or insert on employee
for each row
begin
/* convert character values to lower case */
:new.lastname := lower( :new.lastname );
:new.firstname :=lower( :new.firstname );
end;
/
EN

回答 3

Stack Overflow用户

发布于 2013-11-13 17:10:45

触发器不会引发变化表错误,因为您没有从触发器所在的表中进行选择;您只是重新赋值,而这正是触发器设计的目的。

值得注意的是,这也可以通过CHECK约束来完成,它将强制每个人更新或插入到表中以将所有内容都小写:

代码语言:javascript
复制
alter table employee_name 
  add constraint chk_emp_name_lastname 
      check ( lastname = lower(lastname) )

虽然这会增加更新/插入时间(不一定比使用触发器更多),但它不会默默地更改正在输入的数据,而是会抱怨数据不正确。这有时是一种更好的方法。

票数 3
EN

Stack Overflow用户

发布于 2013-11-13 17:07:39

此代码未引发异常,因为您未尝试执行触发执行的select from table

票数 2
EN

Stack Overflow用户

发布于 2013-11-13 17:11:04

这应该不会引发任何错误。当您从BEFORE触发器读取(或修改)某些其他行时,会发生突变错误。

注意:在某些情况下,同一行多次触发BEFORE触发器。为了保证一致性,Oracle必须证明你的触发器主体是“幂等的”:在同一个输入上的每次执行都会产生相同的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19949416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档