基于作业类别的插入前触发器
Before-insert trigger based on job categories
美好的一天,
我正在尝试创建一个触发器,该触发器应该根据他们的工作类别(medic/other)将用户总数检索到两个参数中,供所有已注册的用户使用,因此我开发了:
CREATE OR REPLACE TRIGGER count_before_insert
BEFORE INSERT
ON REGISTRATION_FORM
FOR EACH ROW
DECLARE
p_current_doctor_number varchar2(20);
p_current_other_number varchar2(20);
p_ann_id number;
BEGIN
-- Count the existing trainees based on medical job category
SELECT COUNT(*) FROM REGISTRATION_FORM INTO p_current_doctor_number
WHERE JOB_CATEGORY = 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
-- Count the existing trainees based on other job category
SELECT COUNT(*) FROM TRN_LS_REGISTRATION_FORM INTO p_current_other_number
WHERE JOB_CATEGORY != 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
但我收到以下错误:
Trigger COUNT_BEFORE_INSERT compiled
LINE/COL ERROR
--------- -------------------------------------------------------------
9/4 PL/SQL: SQL Statement ignored
9/50 PL/SQL: ORA-00933: SQL command not properly ended
14/4 PL/SQL: SQL Statement ignored
14/50 PL/SQL: ORA-00933: SQL command not properly ended
Errors: check compiler log
是SELECT - INTO - FROM
,不是SELECT - FROM - INTO
。
CREATE OR REPLACE TRIGGER count_before_insert
BEFORE INSERT
ON REGISTRATION_FORM
FOR EACH ROW
DECLARE
p_current_doctor_number VARCHAR2 (20);
p_current_other_number VARCHAR2 (20);
p_ann_id NUMBER;
BEGIN
-- Count the existing trainees based on medical job category
SELECT COUNT (*)
INTO p_current_doctor_number
FROM REGISTRATION_FORM
WHERE JOB_CATEGORY = 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
-- Count the existing trainees based on other job category
SELECT COUNT (*)
INTO p_current_other_number
FROM TRN_LS_REGISTRATION_FORM
WHERE JOB_CATEGORY != 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
END;
现在,触发器没有做任何事情 smart 所以我认为您还需要做一些其他事情。
注意变异 table 错误(您不能 select 来自正在修改的 table 的数据)。
此外,p_ann_id
是一个局部变量,目前是 NULL
,所以那些 select 不会 return 任何东西。也许你打算使用
... and ANNOUCMENT_ID = :new.ANNOUCMENT_ID
美好的一天, 我正在尝试创建一个触发器,该触发器应该根据他们的工作类别(medic/other)将用户总数检索到两个参数中,供所有已注册的用户使用,因此我开发了:
CREATE OR REPLACE TRIGGER count_before_insert
BEFORE INSERT
ON REGISTRATION_FORM
FOR EACH ROW
DECLARE
p_current_doctor_number varchar2(20);
p_current_other_number varchar2(20);
p_ann_id number;
BEGIN
-- Count the existing trainees based on medical job category
SELECT COUNT(*) FROM REGISTRATION_FORM INTO p_current_doctor_number
WHERE JOB_CATEGORY = 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
-- Count the existing trainees based on other job category
SELECT COUNT(*) FROM TRN_LS_REGISTRATION_FORM INTO p_current_other_number
WHERE JOB_CATEGORY != 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
但我收到以下错误:
Trigger COUNT_BEFORE_INSERT compiled
LINE/COL ERROR
--------- -------------------------------------------------------------
9/4 PL/SQL: SQL Statement ignored
9/50 PL/SQL: ORA-00933: SQL command not properly ended
14/4 PL/SQL: SQL Statement ignored
14/50 PL/SQL: ORA-00933: SQL command not properly ended
Errors: check compiler log
是SELECT - INTO - FROM
,不是SELECT - FROM - INTO
。
CREATE OR REPLACE TRIGGER count_before_insert
BEFORE INSERT
ON REGISTRATION_FORM
FOR EACH ROW
DECLARE
p_current_doctor_number VARCHAR2 (20);
p_current_other_number VARCHAR2 (20);
p_ann_id NUMBER;
BEGIN
-- Count the existing trainees based on medical job category
SELECT COUNT (*)
INTO p_current_doctor_number
FROM REGISTRATION_FORM
WHERE JOB_CATEGORY = 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
-- Count the existing trainees based on other job category
SELECT COUNT (*)
INTO p_current_other_number
FROM TRN_LS_REGISTRATION_FORM
WHERE JOB_CATEGORY != 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
END;
现在,触发器没有做任何事情 smart 所以我认为您还需要做一些其他事情。
注意变异 table 错误(您不能 select 来自正在修改的 table 的数据)。
此外,p_ann_id
是一个局部变量,目前是 NULL
,所以那些 select 不会 return 任何东西。也许你打算使用
... and ANNOUCMENT_ID = :new.ANNOUCMENT_ID