[code="sql"]
CREATE OR REPLACE TRIGGER "d"
AFTER UPDATE ON "USER"
REFERENCING OLD AS "USER_BEFORE_UPDATED" NEW AS "USER_AFTER_UPDATED"
FOR EACH ROW
DECLARE
OLD_SERVICE VARCHAR2(20);
TIME_D NUMBER;
SERVICE_NAME VARCHAR2(20);
SERVICE_NAME := 'TERMINATE';
BEGIN
--user表的CURRENT_MODE字段被更新为TERMINATE
IF :USER_BEFORE_UPDATED.CURRENT_MODE <> :SERVICE_NAME and :USER_AFTER_UPDATED.CURRENT_MODE = :SERVICE_NAME THEN
--查询user的service名字
:OLD_SERVICE := select SERVICENAME from SERVICE WHERE USER_ID = :USER_AFTER_UPDATED.USER_ID;
--计算当前时间的long型值
:TIME_D := select (sysdate - 8 / 24 - to_date('1970-01-01', 'yyyy-mm-dd')) * 86400000 from dual;
--根据以上数据插入info表一条记录
INSERT INTO INFO VALUES ( :TIME_D,:OLD_SERVICE,'N',:USER_AFTER_UPDATED.USER_NAME);
END IF;
END;
[/code]
[size=medium]本意是:当更新user表的时候,触发事件:当user表的CURRENT_MODE字段被更新为TERMINATE时,执行code,首先查询user的service,计算当前时间的long型值,根据以上数据插入info表一条记录。
这里有一些错误,大家就当是看伪代码,请大家纠错! :D
这里涉及到的问题有:
1 触发器中如何定义一个变量,然后给他赋一个varchar2的值?
2 如何将sql的查询结果赋值给变量
3 如何在代码块中使用变量
另外希望大家讨论讨论oracle调试命令的好工具[/size]