插入不工作之前的SQL插入触发器

时间:2014-05-08 15:18:41

标签: sql oracle-apex triggers

我有两张桌子:

日志:

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'

如果没有创建触发器,则创建正在运行。 任何想法,哪里可能是问题?

1 个答案:

答案 0 :(得分:1)

问题在于这一点

'New task created: ' + :new.title

我假设您的目标是将:new.title连接到字符串'New task created: '。 PL / SQL中的字符串连接运算符不是+,而是||+仅适用于添加两个数字。 Oracle尝试将'New task created: ':new.title转换为一个数字以添加它们 - 这显然会失败,因此会出错。你可以使用

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

您也可以使用concat功能。