基于作业类别的插入前触发器

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