Sql 使用此触发器更改表oracle数据库
使用Oracle数据库,需要以小写形式存储所有行。所有INSERTand UPDATE都应使用小写数据插入和更新行。我写了一个触发器。阅读了很多关于触发器表突变的内容。非常困惑,这段代码是否会引发突变错误。请写在这里,如果可以的话Sql 使用此触发器更改表oracle数据库,sql,oracle,plsql,triggers,Sql,Oracle,Plsql,Triggers,使用Oracle数据库,需要以小写形式存储所有行。所有INSERTand UPDATE都应使用小写数据插入和更新行。我写了一个触发器。阅读了很多关于触发器表突变的内容。非常困惑,这段代码是否会引发突变错误。请写在这里,如果可以的话 create or replace trigger employee_name before update or insert on employee for each row begin /* convert character values to lower ca
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;
/
此代码不会引发异常
因为您没有尝试从表中选择哪个触发器执行此代码,所以不会引发异常 因为您没有尝试从表中选择哪个触发器执行触发器不会引发突变表错误,因为您没有从触发器所在的表中进行选择;您只是在重新分配值,这是触发器的设计目的 值得注意的是,这也可以通过检查约束来实现,它将强制每个人更新或插入表中的内容,以降低所有内容的大小写:
alter table employee_name
add constraint chk_emp_name_lastname
check ( lastname = lower(lastname) )
虽然这会增加更新/插入时间,但不一定比使用触发器更多,它不会悄悄地更改输入的数据,而是抱怨数据不正确。这有时是一种更好的方法。触发器不会引发突变表错误,因为您没有从触发器所在的表中进行选择;您只是在重新分配值,这是触发器的设计目的
值得注意的是,这也可以通过检查约束来实现,它将强制每个人更新或插入表中的内容,以降低所有内容的大小写:
alter table employee_name
add constraint chk_emp_name_lastname
check ( lastname = lower(lastname) )
虽然这会增加更新/插入时间,但不一定比使用触发器更多,它不会悄悄地更改输入的数据,而是抱怨数据不正确。这有时是一种更好的方法。这不应引起任何错误。在触发器之前读取或修改其他行时,会发生突变错误 注意:在某些情况下,BEFORE触发器会针对同一行多次触发。
为了保证一致性,Oracle必须证明触发器主体是幂等的:即,对同一输入的每次执行都会产生相同的结果。这不应引起任何错误。在触发器之前读取或修改其他行时,会发生突变错误 注意:在某些情况下,BEFORE触发器会针对同一行多次触发。
为了保证一致性,Oracle必须证明您的触发器主体是幂等的:即,对同一输入的每次执行都会产生相同的结果。试图理解,但此链接可能有用试图理解,但此链接可能有用