Значение неустановленного столбца в: новая псевдозапись перед обновлением oracle триггер - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь узнать, каково значение столбца в псевдозаписи :new в триггере before update oracle, когда я не могу явно обновить этот столбец, но другие?

Пример:

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

Если есть триггер before update в таблице example, каково значение :new.name ?. Помните, я просто обновляю столбец description.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Если в примере таблицы есть триггер до обновления, каково значение: 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;

И вывод будет таким, как показано ниже

   1 row(s) updated.
   description newexm
   name name

Пожалуйста, перейдите по ссылке ниже для полного примера. https://livesql.oracle.com/apex/livesql/s/jw4epiekg9l76g2zad19x04pc

1 голос
/ 08 апреля 2020

Если в таблице 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
...