2016-09-30 21 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打印出來。

但是,您始終可以測試表中的值。因爲該值應該已經插入表中。你可以查詢。

相關問題