[오라클 PL/SQL] PL/SQL 프로시저 중복 데이터 검사 (UPDATE, INSERT)


안녕하세요.

 

오늘은 프로시저 두 번째 시간으로, 지난번에 프로시저가 무엇이고 어떻게 생성하고 실행하는지를 알아보았는데요.

 

이번 포스팅에서는 지난번 STUDENT 테이블에 새로운 학생을 INSERT 하는 구문에서 동일한 NAME을 가진 학생이 들어 오게 되면 정보를 갱신하도록 프로시저를 한번 수정하는 부분을 보여드리려고 합니다.



 

먼저 아래와 같이 STUDENT 테이블이 있습니다.



이 테이블에 현재 맨 마지막 데이터를 보시게 되면 NAME전현무라는 학생이 저장되어 있는데요.

 

만약에 동일한 전현무라는 이름을 가진 학생이 들어오게 된다면 기존 정보를 새롭게 들어온 데이터로 갱신될 수 있도록 my_new_student_proc 라는 프로시저를 생성해 보도록 하겠습니다.

 

STUDENT 테이블 INSERT 프로시저 생성


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

CREATE OR REPLACE PROCEDURE my_new_student_proc

(

    p_school_no WIN.STUDENT.SCHOOL_NO%TYPE,

    p_class WIN.STUDENT.CLASS%TYPE,

    p_name WIN.STUDENT.NAME%TYPE,

    p_age WIN.STUDENT.AGE%TYPE,

    p_grade WIN.STUDENT.GRADE%TYPE,

    p_score WIN.STUDENT.SCORE%TYPE

)

 

IS 

    vn_cnt NUMBER := 0;

    

BEGIN

    --동일한 이름을 가진 학생이 있는지 체크

    SELECT COUNT(*)

    INTO vn_cnt

    FROM WIN.STUDENT

    WHERE 1 = 1

    AND NAME = p_name;

    

    --동일한 이름을 가진 학생이 없으면 INSERT

    IF vn_cnt = 0 THEN

        INSERT INTO WIN.STUDENT (SCHOOL_NO, CLASS, NAME, AGE, GRADE, SCORE)

        VALUES (p_school_no, p_class, p_name, p_age, p_grade, p_score);

        

    --동일한 이름을 가진 학생이 존재 한다면 UPDATE

    ELSE

        UPDATE WIN.STUDENT

        SET 

            SCHOOL_NO = p_school_no,

            CLASS = p_class,

            NAME = p_name,

            AGE = p_age,

            GRADE = p_grade,

            SCORE = p_score

        WHERE 1 = 1

        AND NAME = p_name;

     

    END IF;

    

    COMMIT;

END;

Colored by Color Scripter

cs

 

프로시저 실행


1

EXECUTE my_new_student_proc('2''4''전현무''24''3''45'); 

cs

 

실행결과



이렇게 위와 같이 전현무라는 학생의 정보가 새롭게 갱신 된 모습을 확인 하실 수 있습니다.


 

감사합니다~~


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY