트리거 사용해서 데이터 저장시 오류 0 4 795

by 나이많은초보 [2021.01.13 10:58:58]


답변 주셨는데, 추가 질문 드려봅니다.
아래의 쿼리를 이용해서 제가 원하는 결과값을 출력해야 하는데, 테이블은 1개만 있습니다.ㅠㅠ
잘 이해가 되지 않아서요...
데이터베이스에 새로운 데이터 입력/ 갱신/ 삭제 이벤트가 발생할때마다 자동적으로 수행되는 사용자 정의 프로시저라고 설명을 들었지만..
V_CNT NUMBER상수로 선언해서 SELECT COUNT(*) INTO V_CNT --> 이부분이 무엇을 말하는지 잘 모르겠습니다.

아래 쿼리를 실행하면 ORA-01400 NULL오류가 나고 있습니다.

1.GOODS_NUM는 primary key의 null을 해제시키라고 하는데.. 방법을 모르겠습니다.

2. GOODS_NUM는 자동으로 번호가 매겨지도록 하고 싶습니다.

즉  입력폼에  모델명/ 이름/용도 등등 입력해서 저장 버튼을 누르면 새로운 내용이면 저장하고 GOODS_NUM에 해당하는 컬럼에 번호가 자동으로 매져지도록 하고 싶은데.... 아래 쿼리는 전혀 다른것 같아서..어디서부터 손봐야 할지...

where 조건에 GOODS_NUM = #GOODS_NUM# -> 이부분이 잘못된걸까요?

 

DECLARE
   V_CNT NUMBER;
  BEGIN
   SELECT COUNT(*)
   INTO V_CNT
     FROM MANUAL
    WHERE GOODS_NUM= #GOODS_NUM#
  IF V_CNT = 0 THEN

  INSERT INTO TB_MANUAL(
      GOODS_NUM      - 번호  -->primary key
      ,GOODS_KOR - 한글상품명
      ,GOODS_ENG - 영문상품명
     ,MODEL  - 모델명
     ,STANDARD - 규격
     ,GOODS_MANUAL -사용설명서
     ,DEPT_ID_NUMBER -부서코드
     ,EMP_NUMBER -사원번호
                  
     )VALUES(
      #GOODS_NUM#
      ,#GOODS_KOR#
      ,#GOODS_ENG#
      ,#MODEL#
      ,#STANDARD#
      ,#GOODS_MANUAL#
      ,#DEPT_ID_NUMBER#
      ,#EMP_NUMBER#
                );
      ELSE
   
     UPDATE TB_PRRODUCT_MANUAL
        SET GOODS_NUM = #GOODS_NUM#
      ,GOODS_KOR = #GOODS_KOR#
      ,GOODS_ENG = #GOODS_ENG#
      ,MODEL  = #MODEL#
      ,STANDARD = #STANDARD#
      ,GOODS_MANUAL = #USE#
      ,DEPT_ID_NUMBER = #DEPT_ID_NUMBER#
      ,EMP_NUMBER = #EMP_NUMBER#
      
      WHERE PERSON-NUM = #PERSON-NUM#;
     
    END IF;
        
   END;

by 마농 [2021.01.13 11:10:45]

입력된 #PERSON_NUM# 에 해당하는
기존 자료가 있는지 카운트 하여 변수에 담고
기존 자료가 없으면 Insert / 있으면 Update 를 실행하는 형태의 구문이네요.


by 나이많은초보 [2021.01.21 11:55:15]

1.GOODS_NUM는 primary key의 null을 해제시키라고 하는데.. 방법을 모르겠습니다.

2. GOODS_NUM는 자동으로 번호가 매겨지도록 하고 싶습니다.

즉  입력폼에  모델명/ 이름/용도 등등 입력해서 저장 버튼을 누르면 새로운 내용이면 저장하고 GOODS_NUM에 해당하는 컬럼에 번호가 자동으로 매져지도록 하고 싶은데.... 아래 쿼리는 전혀 다른것 같아서..어디서부터 손봐야 할지...

where 조건에 GOODS_NUM = #GOODS_NUM# -> 이부분이 잘못된걸까요?


by 마농 [2021.01.21 12:26:43]

1. 기존 질문은 아예 지워버렸네요.
- 이곳은 지식을 공유하는 공간입니다.
- 질문을 지우지 말아 주세요.
2. 자동 번호
- MSSQL, MySQL 등에서는 자동증가 컬럼을 이용하셔야 합니다. - auto increment
- 오라클에서는 시퀀스를 이용합니다. - sequence
3. 기타 사항
- 자동징가 컬럼을 이용한다면? 기존 자료 유무에 따른 삽입/갱신 구별은 다른 형태로 진행되어야 할 것입니다.
- 질문은 트리거인데? 트리거와 무관한 소스를 올려주시는 듯 하네요?


by 나이많은초보 [2021.01.21 13:04:37]

넵 앞으로 주의 하겠습니다.

답변 감사드립니다.

 

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