트리거 오류 0 3 3,230

by 초개초아 트리거 심볼 [2016.12.30 15:58:55]


OBU_VERSION    VARCHAR2
START_UP    CHAR
VEHICLE_ID    VARCHAR2
CAR_NO    VARCHAR2
REC_DATE    VARCHAR2
REC_SEQ    NUMBER
MODEM_NO    VARCHAR2
DTG_MODEL    VARCHAR2
CAR_TYPE    VARCHAR2
BSNS_NO    VARCHAR2
DRIVER_CODE    VARCHAR2
DAY_DISTINCT    NUMBER
TOTAL_DISTINCT    NUMBER
DRV_DATETIME    VARCHAR2
DRV_SPEED    VARCHAR2
DRV_RPM    VARCHAR2
DRV_BREAK    VARCHAR2
GPS_X    VARCHAR2
GPS_Y    VARCHAR2
GPS_FOWARD    VARCHAR2
ACCEL_X    VARCHAR2
ACCEL_Y    VARCHAR2
ERR_CODE    VARCHAR2
REGI_DATE    DATE
ACTION01    VARCHAR2
ACTION02    VARCHAR2
ACTION03    VARCHAR2
ACTION04    VARCHAR2
ACTION05    VARCHAR2
ACTION06    VARCHAR2
ACTION07    VARCHAR2
ACTION08    VARCHAR2
ACTION09    VARCHAR2
ACTION10    VARCHAR2
ACTION11    VARCHAR2
ACTION12    VARCHAR2
ACTION13    VARCHAR2
PORT    VARCHAR2
VOLTAGE    NUMBER
DAY_FUEL    NUMBER
CUMU_FUEL    NUMBER
GEO_NAME    VARCHAR2
GPS_NAME    VARCHAR2

 

 

=========================================

 

CREATE OR REPLACE TRIGGER TEST_TRIGGER
AFTER INSERT ON TB_DRIVE_LOCATION
FOR EACH ROW
DECLARE
LL_CNT number;
Begin
IF INSERTING THEN
SELECT COUNT(*)
INTO LL_CNT
FORM TB_DRIVE_LOCATION
WHERE CAR_NO = NEW.CAR_NO
AND VEHICLE_ID = NEW.VEHICLE_ID
AND MODEM_NO = NEW.MODEM_NO
AND BSNS_NO = NEW.BSNS_NO;

IF LL_CNT > 0
 UPDATE TB_CAR
 SET DTG_PHONENO = NEW.MODEM_NO
     BSNS_NO = BSNS_NO
     WHERE CAR_NO = NEW.CAR_NO
     AND VEHICLE_ID = NEW.VEHICLE_ID;

 

 

/13    PL/SQL: ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
5/1     PL/SQL: SQL Statement ignored
14/2    PLS-00103: 심볼 "UPDATE"를 만났습니다 다음 중 하나가 기대될 때:
          * & - + / at mod remainder rem then <지수(**)> and or ||
          multiset
          심볼이 "then" 계속하기 위하여 "UPDATE"로 치환되었습니다
15/23   PLS-00103: 심볼 "."를 만났습니다 다음 중 하나가 기대될 때:
          mod <식별자> <큰 따옴표로 구분된 식별자>
          <바인드 변수> continue current sql execute forall merge
          pipe purge

 

이런 오류가 낫는데 왜난건지 알려주세요 부탁드리겟습니다..!

 

 

 

 

by 마농 [2016.12.30 16:25:47]

문법오류
  1. UPDATE 의 SET 절의 컬럼들 사이사이 컴마가 누락되었구요.
  2. SET 절의 BSNS_NO 앞에 "NEW." 이 누락되었구요.
  3. IF 문에 THEN 이 누락되었네요.
  4. 전체 트리거가 완성되지 않았네요? 작성하다 만건가요? 일부만 올리신 건가요?
논리오류
  1. 카운트 쿼리의 From 절의 테이블이 잘못되었네요.
    - From 절에 tb_drive_location 이 아니라 tb_car 가 와야 할 듯.


by 초개초아 [2016.12.30 17:11:43]

CREATE OR REPLACE TRIGGER TEST_TRIGGER
After INSERT ON TB_DRIVE_LOCATION
FOR EACH ROW
Declare
    ll_cnt number ;
  Begin
  select count(*)
      into ll_cnt
     from TB_CAR
   where CAR_NO = :new.CAR_NO
      and VEHICLE_ID = :new.VEHICLE_ID
      and DTG_PHONENO  = :new.MODEM_NO
      and BSNS_NO  = :new.BSNS_NO;
       IF ll_cnt > 0 THEN 
     UPDATE s_storage
        SET BSNS_NO    = :New.BSNS_NO
      WHERE CAR_NO        = :new.CAR_NO
        AND VEHICLE_ID   = :new.VEHICLE_ID
        AND MODEM_NO  = :new.MODEM_NO;
           END IF  ;
end if ;
end;

 

 

18/5    PLS-00103: 심볼 "IF"를 만났습니다 다음 중 하나가 기대될 때:
          ; <식별자> <큰 따옴표로 구분된 식별자>

 

 

나머지 다고치고 이심볼오류가 무엇인가요 ㅠㅠ

 

 

 

end if 를 두개나썻군요.. 답변정말감사합니다 해결되었습니다

 


by 마농 [2016.12.30 17:21:54]

문법오류
  - If 는 하나인데 End If 는 두개네요?
  - 조건절의 MODEM_NO = :new.MODEM_NO 은? DTG_PHONENO = :new.MODEM_NO 이 되어야 할 듯?
논리오류
  - 4개 항목중
  - 1개 항목이 업데이트 항목이라면?
  - 나머지 3개 항목이 조건항목인듯 한데요?
  - 카운트 쿼리의 조건절이 4개인데 3개만 주는게 맞을 듯?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입