2016-09-30 50 views
0

我是PL/SQL新手。我正在使用oracle 11g XE以及sql开发人员。我试图创建INSERT触发器后创建如下如何在触发器体中使用绑定变量?

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) 
); 

当我跑我得到了“输入结合”窗口中绑定的声明变量:新。但我很困惑,为什么我需要输入:new,因为它是pseudorecord。然后,我输入'员工'作为新的价值。现在我收到以下错误。

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

当您编译它时,SQL开发人员会要求您输入绑定变量。只要把它们留空即可。他们不是这里错误的来源。当触发器在Insert上运行时,new.emp_id的值将是插入到表中的值。它会自动填充。编译触发器,然后尝试插入以进行测试。 – Hawk

+0

@Hawk。谢谢你的回复。我编译了它。但它有我在问题中指定的错误。 – BabyboBNukes

+0

如果问题是SQL Developer弹出提示,请标记您的问题'sqldeveloper'。我自己并不熟悉它。 –

回答

0

您的问题不在于:new pseudorecord。错误来源于使用print,该错误用于打印成功的 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打印出来。

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

相关问题