[오라클 PL/SQL] PL/SQL 프로시저 중복 데이터 검사 (UPDATE, INSERT)
- Database(데이터베이스)/Oracle
- 2019. 11. 22. 03:00
안녕하세요.
오늘은 프로시저 두 번째 시간으로, 지난번에 프로시저가 무엇이고 어떻게 생성하고 실행하는지를 알아보았는데요.
이번 포스팅에서는 지난번 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; |
프로시저 실행
1 |
EXECUTE my_new_student_proc('2', '4', '전현무', '24', '3', '45'); |
실행결과
이렇게 위와 같이 “전현무” 라는 학생의 정보가 새롭게 갱신 된 모습을 확인 하실 수 있습니다.
감사합니다~~
'Database(데이터베이스) > Oracle' 카테고리의 다른 글
[오라클 에러] ORA-00604 : 순환 SQL 레벨 1 에 오류가 발생했습니다. 해결 방법 (0) | 2019.11.24 |
---|---|
[오라클 PL/SQL] 프로시저 매개변수와 입력 값 매핑 방법 (0) | 2019.11.23 |
[오라클 PL/SQL] PL/SQL 프로시저 생성 방법 및 사용 예제 (0) | 2019.11.21 |
[오라클 PL/SQL] 오라클 PL/SQL 함수 생성 (특정 테이블 함수 호출로 데이터 조회) (0) | 2019.11.20 |
[오라클 PL/SQL] 사용자 정의 함수 생성 및 호출 방법 (0) | 2019.11.17 |
이 글을 공유하기