2014-05-08 62 views
0

我有兩個表:SQL INSERT觸發器前插入不工作

日誌:

Column Name Data Type Nullable Default Primary Key 
ID_LOG NUMBER No - - 
EVENT VARCHAR2(255) Yes - - 
TIMESTAMP_LOG TIMESTAMP(6) Yes - - 

任務:

Column Name Data Type Nullable Default Primary Key 
ID NUMBER(10,0) No - 1 
PRIORITY_ID NUMBER(10,0) No - - 
TITLE VARCHAR2(50) No - - 
TASK_DESCRIPTION VARCHAR2(2048) No - - 
EXPECTED_CONSUM_TIME NUMBER(10,0) Yes - - 
TIME_UNIT_ID NUMBER(10,0) Yes - - 
DEADLINE DATE Yes - - 
CONTRACTOR_ID NUMBER(10,0) No - - 
IMPLEMENTER_ID NUMBER(10,0) No - - 
TYPE_ID NUMBER(10,0) No - - 

我創建了一個觸發,所以它應該插入記錄與當前的時間戳當我創建任務。

CREATE OR REPLACE TRIGGER TR_TASK_LOGGING 
BEFORE INSERT ON task 
FOR EACH ROW 
BEGIN 
    INSERT INTO log (id_log, event, timestamp_log) 
    VALUES (LOG_SEQ.nextval, 'New task created: ' + :new.title, CURRENT_TIMESTAMP); 
END TR_TASK_LOGGING; 

創建該觸發器沒有任何錯誤。

但是,如果我嘗試插入:

INSERT INTO task (ID, PRIORITY_ID, title, task_description, EXPECTED_CONSUM_TIME, TIME_UNIT_ID, DEADLINE, CONTRACTOR_ID, IMPLEMENTER_ID, TYPE_ID) VALUES (TASK_SEQ.nextval, 3, 'something', 'something', 8, 2, '30-05-2014', 4, 8, 22); 

我得到了這些錯誤:

ORA-01722: invalid number 
ORA-06512: on "TEAM_6.TR_TASK_LOGGING", line 2 
ORA-04088: error during executing trigger 'TEAM_6.TR_TASK_LOGGING' 

如果沒有觸發創建創建工作。 任何想法,哪裏可能是問題?

回答

2

的問題是該位

'New task created: ' + :new.title 

我假設你的目標是到:new.title串聯到字符串'New task created: '。 PL/SQL中的字符串連接操作符不是+,但是它是||+只能用於添加兩個數字。 Oracle試圖將'New task created: ':new.title轉換爲一個數字來添加它們 - 顯然會失敗,因此會出現錯誤。您可以使用

'New task created: ' || :new.title 

您也可以使用concat函數。