2014-01-25 66 views
0

我想創建一個觸發器,每次向USERS表插入一個觸發器,這些觸發器會向BALANCES表中插入幾個條目,SQL_COINS_VIEW視圖中存在每個硬幣ID的一個條目(希望我很清楚)。這個想法是,每創建一個賬戶,它就得到列表中每個可用硬幣的餘額爲0。用多個插入內部的遊標創建觸發器

我想這一點 -

CREATE or REPLACE TRIGGER update_balances 
AFTER INSERT 
ON USERS 
FOR EACH ROW 
DECLARE 
v_userid number(8); 
cursor coinlist_cur is 
select ID from SQL_COINS_VIEW; 
BEGIN 
select ID into v_userid from USERS; 
For coinid in coinlist_cur 
loop 
insert into balances 
(BALANCES_ID_SEQ.NEXTVAL,v_userid,coinid,0); 
end loop; 
END; 

,但我得到一個錯誤 -

Error(10,1): PL/SQL: SQL Statement ignored 
Error(11,42): PL/SQL: ORA-01747: invalid user.table.column, table.column, or column specification 

表是結構這樣 -

SQL> desc SQL_COINS_VIEW; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ID          NOT NULL NUMBER(10) 
NAME          NOT NULL VARCHAR2(50) 
VALUE          NOT NULL NUMBER(18,6) 
UPDATETIME           NVARCHAR2(10) 

SQL> 
SQL> desc USERS; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ID          NOT NULL NUMBER(8) 
LOGINNAME         NOT NULL VARCHAR2(12) 
PASSWORD         NOT NULL VARCHAR2(12) 
EMAIL          NOT NULL VARCHAR2(50) 
PHONENUMBER          VARCHAR2(25) 

SQL> 
SQL> desc BALANCES; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ID          NOT NULL NUMBER(12) 
USERID         NOT NULL NUMBER(8) 
COINID         NOT NULL NUMBER(10) 
AMOUNT         NOT NULL NUMBER(30) 

我怎樣才能正確地創建這個觸發器?

在此先感謝。

回答

1

您的insert缺少values關鍵字;錯誤是因爲它試圖將值解釋爲列名。而coinid是創紀錄的,所以你需要參考範圍內的一個領域,這是在遊標聲明id

insert into balances 
values (BALANCES_ID_SEQ.NEXTVAL,v_userid,coinid.id,0); 

這是很好的做法,列出列也不過。

+1

詛咒你,紅男爵! :-)和+1 - 我只是想指出...... –