web-dev-qa-db-ja.com

トリガー本体(PL / SQL)内の変数を修飾する方法

ストアドプロシージャまたは関数の本体で変数を明示的に修飾できます。

create or replace
PROCEDURE ptest  AS
int_val INT;
BEGIN
  ptest.int_val:=0;
END;
/

同じ内部トリガーを行う方法は?

 create table temp1(id int not null);

 create or replace trigger trg_before_insert_temp1 before insert  on temp1 for each row
declare int_val int;
 begin

   trg_before_insert_temp1.int_val := 0; -- PLS-00201, identifier must be declared

 end trg_before_insert_temp1;
 /
5
a1ex07

興味深い質問です。私の知る限り、そうであるように思えますが、これは不可能です。他の誰かがそれをどのように行うことができるかを示すことができない限り、回避策はコードをブロックにネストすることです:

create or replace trigger trg_before_insert_temp1 before insert on temp1 for each row
declare
begin
   <<bob>> declare
      int_val int;
   BEGIN
      bob.int_val := 0; 
   END;
end trg_before_insert_temp1;
8
Leigh Riffel