Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用此触发器更改表oracle数据库_Sql_Oracle_Plsql_Triggers - Fatal编程技术网

Sql 使用此触发器更改表oracle数据库

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

使用Oracle数据库,需要以小写形式存储所有行。所有INSERTand UPDATE都应使用小写数据插入和更新行。我写了一个触发器。阅读了很多关于触发器表突变的内容。非常困惑,这段代码是否会引发突变错误。请写在这里,如果可以的话

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必须证明您的触发器主体是幂等的:即,对同一输入的每次执行都会产生相同的结果。

试图理解,但此链接可能有用试图理解,但此链接可能有用