2014-05-08 61 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函数。