如何在触发器体中使用绑定变量?

时间:2016-09-30 03:14:09

标签: plsql oracle11g database-trigger

我是PL / SQL的新手。我使用oracle 11g XE和sql developer。我尝试创建以创建后插入触发器,如下所示

create or replace trigger tr1
after 
insert ON
employee
for each row
begin
 print :new.emp_id;
end;

员工表格如下

create table employee
( emp_id varchar2(5) primary key,
  emp_name varchar2(10),
  salary number,
  company varchar2(10) foreign key references companies(comp_name)
);

当我发表声明时,我得到了一个'输入绑定' bind变量的窗口:new。但我很困惑,为什么我需要输入值:new,因为它是伪记录。然后我进入了员工'作为:new的值。现在我收到以下错误。

Error(2,8): PLS-00103: Encountered the symbol "" when expecting one of the following:     := . ( @ % ; The symbol ":=" was substituted for "" to continue.   

1 个答案:

答案 0 :(得分:0)

您的问题不在:new伪记录中。该错误来自print的使用,{{3}}用于打印成功的 PL / SQL块中使用的或在EXECUTE命令中使用的绑定变量。例如,您可以这样使用它:

VARIABLE n NUMBER   
BEGIN  
:n := 1;  
END;  
/      

然后

PRINT n;

但是如果要测试插入的值,可以像这样使用DBMS_OUTPUT.PUT_LINE:

create or replace trigger tr1   
after    
insert ON   
employee   
for each row   
BEGIN   
 dbms_output.put_line(:new.emp_id);   
END;   
/   

在SQL Developer中启用DBMS_OUTPUT窗口,然后运行

insert into employee values(1, 'empName', 1000, 'ABC');

您会看到1已打印出来。

但是,您始终可以测试表中的值。因为该值应该已经插入表中。你可以查询。