IF UPDATING('NIANLEIJI') OR UPDATING('SHANGNIAN') THEN
UPDATE INDISUM
SET ZONGLEIJI = :NEW.NIANLEIJI + :NEW.SHANGNIAN
WHERE "ID" = :OLD."ID";
---可以是可以,但不需要这样写了,你可以改一下,改成:
IF UPDATING('NIANLEIJI') OR UPDATING('SHANGNIAN') THEN
:NEW.ZONGLEIJI = :NEW.NIANLEIJI + :NEW.SHANGNIAN
END IF;IF UPDATING('ZONGLEIJI') OR UPDATING('DONGJIE') THEN
:NEW.KEYONG = :NEW.ZONGLEIJI - :NEW.DONGJIE
END IF;
--
UPDATE INDISUM
SET ZONGLEIJI = :NEW.NIANLEIJI + :NEW.SHANGNIAN
WHERE "ID" = :OLD."ID";
---可以是可以,但不需要这样写了,你可以改一下,改成:
IF UPDATING('NIANLEIJI') OR UPDATING('SHANGNIAN') THEN
:NEW.ZONGLEIJI = :NEW.NIANLEIJI + :NEW.SHANGNIAN
END IF;IF UPDATING('ZONGLEIJI') OR UPDATING('DONGJIE') THEN
:NEW.KEYONG = :NEW.ZONGLEIJI - :NEW.DONGJIE
END IF;
--
解决方案 »
- 一个字段全半角混合,请问如何无视全半角,截取前几位文字?
- 求助,oracle导出表结构到sql文件问题
- 数据库访问效率
- oracle dbca无法执行 windows7环境
- group by语句加序号的问题
- sql server 语句转换为oracel中的SQL语句的问题,急!!!
- 如何列出一个数据库中的所有表,以及一个表中的所有字段
- ***大家谈一谈都是如何开发以Oracle为数据库的程序***
- 请教:在8.1.7的OEM中,我的数据库不能STARTUP,IMPORT之前必须STARTUP吗?
- 请问ORACLE(9i)的客户端什么地方有下载??
- 请求高手帮一下,创建数据库不成功
- 一个触发器的问题?
这样做好像也不行,我试了,但编译不通。
CREATE OR REPLACE TRIGGER "TRI_SUM" BEFORE UPDATE ON "INDISUM" FOR EACH ROW
BEGIN
....
create sequence SEQ_XT_LOG
minvalue 1
maxvalue 9999999999999999999999999999
start with 1062
increment by 1
cache 20
cycle;
下面的触发器的作用是:任何时候表中插入或更新了行, 当前的用户名和时间都记录入行中. 并且它保证给出了雇员名称并且薪水是一个正数. CREATE TABLE emp (
empname text,
salary integer,
last_date timestamp,
last_user text
);CREATE FUNCTION emp_stamp () RETURNS OPAQUE AS '
BEGIN
-- 检查是否给出了 empname 和 salary
IF NEW.empname ISNULL THEN
RAISE EXCEPTION ''empname cannot be NULL value'';
END IF;
IF NEW.salary ISNULL THEN
RAISE EXCEPTION ''% cannot have NULL salary'', NEW.empname;
END IF; -- 我们必须付帐给谁?
IF NEW.salary < 0 THEN
RAISE EXCEPTION ''% cannot have a negative salary'', NEW.empname;
END IF; -- 记住何时何人的薪水被修改了
NEW.last_date := ''now'';
NEW.last_user := current_user;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
1.把after 换成 before
2.因为数值之间有关联,所以也不必判断那个被修改了,全部修正一遍省事。
CREATE OR REPLACE TRIGGER "TRI_SUM" before
UPDATE ON "INDISUM" FOR EACH ROW BEGIN
:new.NIANLEIJI = :NEW.JIAFEN - :NEW.YONGFEN - :NEW.JIANFEN
:new.PAIXU = :NEW.JIAFEN + :NEW.YONGFEN - :NEW.JIANFEN
:new.ZONGLEIJI = :NEW.NIANLEIJI + :NEW.SHANGNIAN
:new.KEYONG = :NEW.ZONGLEIJI - :NEW.DONGJIE
END TRI_SUM;