17,382
社区成员




自治事务触发器:
CREATE OR REPLACE TRIGGER SFCS.EF_STANDARD_WORK_T
AFTER INSERT OR UPDATE ON SFCS.EF_STANDARD_WORK_HOURS
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN (NEW.GROUP_ID IN (18, 19, 23, 25, 57))
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
TMPVAR NUMBER;
MODELS VARCHAR(40);
PART_NO VARCHAR(20);
COUNTS1 NUMBER;
COUNTS2 NUMBER;
STANDARD_WORK_TIME NUMBER;
CURSOR C_PARTNO;
BEGIN
IF :NEW.GROUP_ID IN (18, 19, 23) THEN
SELECT SUM(STANDARD_WORK_TIME)
INTO STANDARD_WORK_TIME
FROM EF_STANDARD_WORK_HOURS
WHERE MODEL = :NEW.MODEL
AND GROUP_ID IN (18, 19, 23);
SELECT NVL(COUNT(*), 0)
INTO COUNTS2
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '70';
IF COUNTS2 > 0 THEN
CURSOR C_PARTNO IS
SELECT PART_NO
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '70';
OPEN C_PARTNO;
LOOP
FETCH C_PARTNO
INTO PART_NO;
EXIT WHEN C_PARTNO% NOTFOUND;
INSERT INTO EF_STANDARD_WORK
VALUES
(ERP_STANDARD_WORK_SEQUENCE.NEXTVAL,
:NEW.MODEL,
PART_NO,
STANDARD_WORK_TIME,
3,
SYSDATE,
SYSDATE,
0);
END LOOP;
CLOSE C_PARTNO;
END IF;
ELSE
BEGIN
SELECT SUM(STANDARD_WORK_TIME)
INTO STANDARD_WORK_TIME
FROM EF_STANDARD_WORK_HOURS
WHERE MODEL = :NEW.MODEL
AND GROUP_ID IN (25, 27);
SELECT NVL(COUNT(*), 0)
INTO COUNTS1
FROM EF_STANDARD_WORK
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95'
AND A.MODEL = :NEW.MODEL;
SELECT NVL(COUNT(*), 0)
INTO COUNTS2
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95';
IF COUNTS2 > 0 THEN
DECLARE
CURSOR C_PARTNO IS
SELECT PART_NO
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95';
BEGIN
OPEN C_PARTNO;
LOOP
FETCH C_PARTNO
INTO PART_NO;
EXIT WHEN C_PARTNO% NOTFOUND;
INSERT INTO EF_STANDARD_WORK
VALUES
(ERP_STANDARD_WORK_SEQUENCE.NEXTVAL,
:NEW.MODEL,
PART_NO,
STANDARD_WORK_TIME,
3,
SYSDATE,
SYSDATE,
0);
END LOOP;
CLOSE C_PARTNO;
END;
END IF;
END;
END IF;
TMPVAR := 0;
ELECT MYSEQ.NEXTVAL
INTO TMPVAR FROM DUAL;
:NEW.SEQUENCECOLUMN := TMPVAR;
:NEW.CREATEDDATE := SYSDATE;
:NEW.CREATEDUSER := USER;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END EF_STANDARD_WORK_T;
/
原因是存在双字节的空格和有个new没有给":"
修改如下:
CREATE OR REPLACE TRIGGER SFCS.EF_STANDARD_WORK_T
AFTER INSERT OR UPDATE ON SFCS.EF_STANDARD_WORK_HOURS
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN (NEW.GROUP_ID IN (18, 19, 23, 25, 57))
DECLARE
TMPVAR NUMBER;
MODELS VARCHAR(40);
PART_NO VARCHAR(20);
COUNTS1 NUMBER;
COUNTS2 NUMBER;
STANDARD_WORK_TIME NUMBER;
CURSOR C_PARTNO;
BEGIN
IF :NEW.GROUP_ID IN (18, 19, 23) THEN
SELECT SUM(STANDARD_WORK_TIME)
INTO STANDARD_WORK_TIME
FROM EF_STANDARD_WORK_HOURS
WHERE MODEL = :NEW.MODEL
AND GROUP_ID IN (18, 19, 23);
SELECT NVL(COUNT(*), 0)
INTO COUNTS2
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '70';
IF COUNTS2 > 0 THEN
CURSOR C_PARTNO IS
SELECT PART_NO
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '70';
OPEN C_PARTNO;
LOOP
FETCH C_PARTNO
INTO PART_NO;
EXIT WHEN C_PARTNO% NOTFOUND;
INSERT INTO EF_STANDARD_WORK
VALUES
(ERP_STANDARD_WORK_SEQUENCE.NEXTVAL,
:NEW.MODEL,
PART_NO,
STANDARD_WORK_TIME,
3,
SYSDATE,
SYSDATE,
0);
END LOOP;
CLOSE C_PARTNO;
END IF;
ELSE
BEGIN
SELECT SUM(STANDARD_WORK_TIME)
INTO STANDARD_WORK_TIME
FROM EF_STANDARD_WORK_HOURS
WHERE MODEL = :NEW.MODEL
AND GROUP_ID IN (25, 27);
SELECT NVL(COUNT(*), 0)
INTO COUNTS1
FROM EF_STANDARD_WORK
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95'
AND A.MODEL = :NEW.MODEL;
SELECT NVL(COUNT(*), 0)
INTO COUNTS2
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95';
IF COUNTS2 > 0 THEN
DECLARE
CURSOR C_PARTNO IS
SELECT PART_NO
FROM INV_PN
WHERE MODEL = :NEW.MODEL
AND SUBSTR(PART_NO, 1, 2) = '95';
BEGIN
OPEN C_PARTNO;
LOOP
FETCH C_PARTNO
INTO PART_NO;
EXIT WHEN C_PARTNO% NOTFOUND;
INSERT INTO EF_STANDARD_WORK
VALUES
(ERP_STANDARD_WORK_SEQUENCE.NEXTVAL,
:NEW.MODEL,
PART_NO,
STANDARD_WORK_TIME,
3,
SYSDATE,
SYSDATE,
0);
END LOOP;
CLOSE C_PARTNO;
END;
END IF;
END;
END IF;
TMPVAR := 0;
ELECT MYSEQ.NEXTVAL
INTO TMPVAR FROM DUAL;
:NEW.SEQUENCECOLUMN := TMPVAR;
:NEW.CREATEDDATE := SYSDATE;
:NEW.CREATEDUSER := USER;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END EF_STANDARD_WORK_T;
/