PL/SQL: ORA-00917 编译失败,第 49 行 (11:56:09) 与关联的行号

PL/SQL: ORA-00917 Compilation failed, line 49 (11:56:09) The line numbers associated with

create or replace TRIGGER  R_TRACKER_TRI
   before insert on R_TRACKER
   for each row
   declare
   v_number varchar2(15);
   begin

      if inserting then 
         :NEW.PROJECT_ID := PROJECT_ID(1);
         :NEW.PRO_CREATED := LOCALTIMESTAMP;
         :NEW.PRO_CREATED_BY := nvl(v('APP_USER'),USER);

         IF :NEW.RECRUITMENT_TYPE= 'New' THEN

          SELECT ('NEW/'||TO_CHAR(SYSDATE,'YY') || '/' || (NVL(MAX(SUBSTRB(PROJECT_ID,8)),10000)+1)) into v_number 
          FROM R_TRACKER
          WHERE SUBSTRB(PROJECT_ID,1,3) = 'NEW';

          :NEW.PROJECT_ID := v_number;

          elsif :NEW.RECRUITMENT_TYPE= 'Replacement' THEN

          SELECT ('REP/'||TO_CHAR(SYSDATE,'YY') || '/' || (NVL(MAX(SUBSTRB(PROJECT_ID,8)),10000)+1)) into v_number 
          FROM R_TRACKER
          WHERE SUBSTRB(PROJECT_ID,1,3) = 'REP';
            :NEW.PROJECT_ID := v_number;  

         end if;
INSERT INTO R_TRACKER
            (
              PROJECT_ID,
              PRO_LOC,
              DESIGNATION,
              NO_OF_POSITION,
              VACANCY_SINCE,
              STATUS,
              REMARKS,
              UPLOAD,
          RECRUITMENT_TYPE,
          APPROVAL,
          ACTION
            )
            VALUES
            (
              :NEW.PROJECT_ID,
              :NEW.PRO_LOC,
              :NEW.DESIGNATION,
              :NEW.NO_OF_POSITION,
              :NEW.VACANCY_SINCE,
              :NEW.STATUS,
              :NEW.REMARKS 
              :NEW.UPLOAD,
          :NEW.RECRUITMENT_TYPE,
          :NEW.APPROVAL,
          :NEW.ACTION
            );         
                end if;
                end;

查看您的代码可以看出您需要了解 Trigger 的用法。请阅读。简而言之,我想说 triggertable 上的一个事件。创建它是为了自动处理 table 的列值 insertion/updation/deletion。在您的情况下,您正在 table R_TRACKER 上创建触发器,然后在 inserting 下面再次创建触发器。这是错误的。看看你是怎么做到的。

--Table
CREATE TABLE R_TRACKER
(
   PROJECT_ID         VARCHAR2 (50),
   PRO_LOC            VARCHAR2 (50),
   DESIGNATION        VARCHAR2 (50),
   NO_OF_POSITION     VARCHAR2 (50),
   VACANCY_SINCE      VARCHAR2 (50),
   STATUS             VARCHAR2 (50),
   REMARKS            VARCHAR2 (50),
   UPLOAD             VARCHAR2 (50),
   RECRUITMENT_TYPE   VARCHAR2 (50),
   APPROVAL           VARCHAR2 (50),
   ACTION             VARCHAR2 (50)
);

--触发于table

CREATE OR REPLACE TRIGGER R_TRACKER_TRI
   BEFORE INSERT  ON R_TRACKER
   FOR EACH ROW
DECLARE
   v_number   VARCHAR2 (15);
BEGIN
   IF INSERTING
   THEN
      :NEW.PROJECT_ID := '1';--PROJECT_ID(1) -- This seems to be a function in your case;
     --:NEW.PRO_CREATED := LOCALTIMESTAMP;
     -- :NEW.PRO_CREATED_BY := NVL('APP_USER', USER);

      IF :NEW.RECRUITMENT_TYPE = 'New'
      THEN
         SELECT (   'NEW/'
                 || TO_CHAR (SYSDATE, 'YY')
                 || '/'
                 || (NVL (MAX (SUBSTRB (PROJECT_ID, 8)), 10000) + 1))
           INTO v_number
           FROM R_TRACKER
          WHERE SUBSTRB (PROJECT_ID, 1, 3) = 'NEW';

         :NEW.PROJECT_ID := v_number;

      ELSIF :NEW.RECRUITMENT_TYPE = 'Replacement'
      THEN
         SELECT (   'REP/'
                 || TO_CHAR (SYSDATE, 'YY')
                 || '/'
                 || (NVL (MAX (SUBSTRB (PROJECT_ID, 8)), 10000) + 1))
           INTO v_number
           FROM R_TRACKER
          WHERE SUBSTRB (PROJECT_ID, 1, 3) = 'REP';

         :NEW.PROJECT_ID := v_number;
      END IF;

   END IF;
END;