簡體   English   中英

未設置列的值:更新 oracle 觸發器之前的新偽記錄

[英]Value of a unset column in :new pseudorecord before update oracle trigger

我想知道當我沒有顯式更新此列但其他列時before update oracle 觸發器中的:new偽記錄中的列的值是什么?

例子:

create table example (cod number(10),name varchar(50),description varchar(50));
update example set description = 'value example' where cod = 1;

如果example表上有before update觸發器,那么:new.name的值是多少? 請記住,我只是在更新description列。

謝謝

如果example表上有before update觸發器,那么:new.name的值是多少? 請記住,我只是在更新description列。

它將包含當前正在更新的行的name列中的值。

很容易測試

create table example (cod number(10),name varchar(50),description varchar(50)); 

create trigger trg_example
before update on example
for each row
begin
    dbms_output. put_line('new name:' || :new.name);
end;
/

insert into example(cod, name, description) values(1, 'foo', 'bar');
-- 1 rows affected

update example set description = 'zoo' where cod = 1;
-- 1 rows affected
dbms_output:
new name:foo

如果示例表上有更新前觸發器,那么:new.name 的值是多少? :new.name 將僅包含 name 的現有值。 請參閱下面我嘗試過的示例。

insert into example values(123,'name','dummy desc');
CREATE OR REPLACE TRIGGER example_before_update 
BEFORE UPDATE of description 
   ON example 
   FOR EACH ROW 

  DECLARE 
   description varchar2(10); 
   name varchar2(50); 

 BEGIN 
 -- Update updated_description 
  description:=:new.description; 
  name:=:new.name; 
  dbms_output.put_line( 'description  ' || description); 
  dbms_output.put_line( 'name  ' || name); 

 END; 

  update example set description = 'newexm' where cod = 123;

output 如下

   1 row(s) updated.
   description newexm
   name name

請參閱以下鏈接以獲取完整示例。 https://livesql.oracle.com/apex/livesql/s/jw4epiekg9l76g2zad19x04pc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM