SQL과 프로시저
목차 21
10강·11강이 메모리 안에서 데이터를 다뤘다면, 12강은 DB 서버 안에 저장해두고 자동·반복 실행하는 SQL 프로그램(절차형 SQL)을 다룬다. 매 회차 확실한 점수밭은 셋 — 절차형 SQL 3종 매칭, 트리거 이벤트 SELECT 함정, 함수 vs 프로시저 RETURN 차이. 분량은 길어 보여도 출제 폭이 좁은 강이다.
핵심 암기: 절차형 SQL 3종 프트사 · PL/SQL 4부 구성 선실종예 · 트리거 이벤트 삽갱삭 · 트리거 시점·범위 BA행문 · 프로시저 매개변수 IN·OUT·INOUT · 함수=RETURN·프로시저=EXECUTE
절차형 SQL의 개요
일반 SQL vs 절차형 SQL ·개요·
[정의] 일반 SQL(DML) = 한 문장을 클라이언트가 보내면 DB가 한 번 처리하고 결과를 돌려주는 단발 명령. 절차형 SQL(Procedural SQL) = 변수 선언과 IF·LOOP·WHILE 같은 흐름 제어를 갖춘 SQL 묶음을 DB 서버에 미리 저장해두고 호출 한 번으로 실행하는 프로그램.
| 구분 | 일반 SQL (DML) | 절차형 SQL |
|---|---|---|
| 처리 단위 | 한 문장씩 | 여러 문장 + 흐름 제어 묶음 |
| 흐름 제어 | 없음 | IF / LOOP / WHILE 가능 |
| 변수 선언 | 불가 | DECLARE 로 가능 |
| 저장 위치 | 클라이언트가 매번 전송 | DB 서버에 저장 |
| 대표 명령 | SELECT·INSERT·UPDATE·DELETE | PROCEDURE·TRIGGER·FUNCTION |
| 컴파일 | 매번 파싱 | 미리 컴파일·저장 |
💡 비유 일반 SQL = 단답형 답안('합계 얼마?' 한 줄), 절차형 SQL = 서술형 답안지(조건 분기·반복·예외를 한 덩어리로). 🎯 빈출 '여러 SQL을 묶고 흐름 제어가 가능' 또는 'DB 서버에 미리 컴파일·저장' 키워드 → 절차형 SQL 즉답.
절차형 SQL 3종 — 프트사 ·분류·1순위·
[정의] 절차형 SQL은 딱 세 형태. 시험 매칭은 거의 이 3종 안에서 끝난다.
| 종류 | 한 줄 정의 | 호출 방식 |
|---|---|---|
| 프로시저(Procedure) | 자주 쓰는 SQL 묶음을 미리 저장 | 사용자가 명시적 호출(EXECUTE/CALL) |
| 트리거(Trigger) | 특정 이벤트 발생 시 자동 실행 | DBMS가 자동 호출(사용자 호출 X) |
| 사용자 정의 함수(UDF) | 값을 받아 RETURN으로 결과를 돌려줌 | SELECT 등 SQL 안에서 호출 |
🔑 암기 프트사 — 프로시저·트리거·사용자 정의 함수. 한 줄 회수: '부르면(프로시저)·알아서(트리거)·답을 돌려준다(함수).' ⚠️ 함정 인덱스·뷰·시퀀스는 절차형 SQL이 아님 — 검색 속도용 자료구조·가상 테이블 등 다른 DB 객체. 보기에 섞이면 그게 정답. 🎯 빈출 3종 매칭은 매 회차 단골. 프트사만 흔들리지 않으면 즉답. 📝 기출 '절차형 SQL 종류가 아닌 것?' → 인덱스.
PL/SQL 블록 4부 구성 — 선실종예 ·구성·
[정의] 프트사 3종 모두 안쪽 구조는 4부로 동일. 순서대로 한 덩어리로 흐른다.
| 부 | 키워드 | 역할 |
|---|---|---|
| ① 선언부 | DECLARE | 변수·상수·예외 선언 |
| ② 실행부 | BEGIN ~ | 실제 SQL + 흐름 제어 |
| ③ 종료부 | END; | 블록 종료 |
| ④ 예외부 | EXCEPTION | 오류 처리(선택) |
DECLARE -- ① 선언부
v_total NUMBER;
BEGIN -- ② 실행부
SELECT SUM(amount) INTO v_total FROM sales;
EXCEPTION -- ④ 예외부(선택)
WHEN NO_DATA_FOUND THEN NULL;
END; -- ③ 종료부
🔑 암기 선실종예 — 선언·실행·종료·예외. 선언→실행→종료는 필수, 예외는 선택(실무는 거의 필수). ⚠️ 함정 '구성요소가 아닌 것?'에 인덱스부·뷰부·매개변수부 같은 가짜를 섞는다. 선실종예 4부에 없으면 정답. 🎯 빈출 4부 구성·순서 매칭 + '아닌 것' 소거형. 📝 기출 '구성요소 아닌 것?' → 인덱스부.
프로시저
프로시저 정의와 장점 ·프로시저·
[정의] 특정 기능의 SQL 묶음을 DB 서버에 저장해두고, 사용자가 명시적으로 호출(EXECUTE/CALL)해 실행하는 절차형 SQL. 핵심 두 단어 — 미리 저장 + 사용자 호출. 알아서 도는 트리거와 정반대.
| 장점 | 한 줄 설명 |
|---|---|
| 재사용성 | 한 번 작성, 어디서든 호출 |
| 성능 향상 | 미리 컴파일·저장 → 실행이 빠름 |
| 네트워크 부하 감소 | SQL 전체 대신 호출 한 줄만 전송 |
| 보안 강화 | 테이블 직접 접근권 없이 실행권(GRANT EXECUTE)만 부여 |
💡 비유 미리 만들어둔 요리 레시피 — '실행!' 한 번이면 끝. 결과는 식탁(테이블)에 차려질 뿐, 레시피 자체가 값을 돌려주진 않는다. 🔑 즉답 '미리 컴파일·저장되어 호출만으로 실행' + 'EXECUTE/CALL' → 프로시저. 🎯 빈출 일괄 처리·야간 배치·여러 SQL을 한 트랜잭션으로 묶는 자리. (보안의 GRANT/REVOKE·트랜잭션의 COMMIT/ROLLBACK은 3과목 26·29강에서 자세히.)
프로시저 매개변수 — IN·OUT·INOUT ·프로시저·
[정의] 프로시저가 데이터를 주고받는 통로. 3종이다.
| 종류 | 방향 | 역할 |
|---|---|---|
| IN | 입력 전용 | 호출자 → 프로시저 (기본값) |
| OUT | 출력 전용 | 프로시저 → 호출자 (결과 반환) |
| INOUT | 양방향 | 입력+출력 겸용 (왕복) |
🔑 암기 IN·OUT·INOUT — 들어오는 길·나가는 길·왕복. ⚠️ 함정 RETURN은 프로시저 매개변수가 아니라 함수 키워드. '매개변수 종류가 아닌 것?'에 RETURN을 섞는 게 단골 — 정답이 RETURN이다. 🎯 빈출 3종 매칭 + RETURN 끼워넣기 함정. 📝 기출 '프로시저 매개변수가 아닌 것?' → RETURN.
트리거
트리거 정의 — 프로시저와 정반대 ·트리거·
[정의] 테이블에 특정 이벤트(INSERT/UPDATE/DELETE)가 발생할 때 DBMS가 자동으로 실행하는 절차형 SQL. 사용자가 부르지 않아도 이벤트만 발생하면 작동한다.
| 비교 | 프로시저 | 트리거 |
|---|---|---|
| 실행 주체 | 사용자 (EXECUTE/CALL) | DBMS 자동 |
| 호출 시점 | 원할 때 | DML 이벤트 발생 시 |
| 매개변수 | IN/OUT/INOUT | 없음 (NEW/OLD 사용) |
💡 비유 프로시저 = 부르면 일하는 요리사 / 트리거 = 부르지 않아도 문이 열리면 켜지는 현관 센서등. ⚠️ 함정 '트리거를 사용자가 EXECUTE/CALL로 호출' → 100% 함정. 트리거의 정체성은 DBMS 자동 실행. 🎯 빈출 '이벤트 발생 시 자동 실행' → 트리거 / '사용자가 호출' → 프로시저. 📝 기출 자동 실행 식별, '사용자 CALL 호출' 틀린 보기.
트리거 이벤트 3종 — 삽갱삭 ·트리거·1순위·
[정의] 트리거를 깨우는 이벤트는 DML 3대장 셋뿐.
| 이벤트 | 명령 | 데이터 변경? |
|---|---|---|
| 삽입 | INSERT | ✅ |
| 갱신 | UPDATE | ✅ |
| 삭제 | DELETE | ✅ |
| (조회) | SELECT | ❌ 트리거 이벤트 아님 |
🔑 암기 삽갱삭 — 삽입·갱신·삭제. DML 3대장이 그대로 트리거 이벤트.
⚠️ 함정 SELECT는 트리거 이벤트가 아니다 — 매 회차 함정 1순위. 단순 조회라 데이터를 바꾸지 않는다. '이벤트가 아닌 것?'에 SELECT가 보이면 거의 그게 정답.
🎯 빈출 '트리거 이벤트가 아닌 것?' 소거형. 한 트리거에 AFTER INSERT OR UPDATE OR DELETE로 여러 이벤트를 묶을 수도 있다.
📝 기출 '이벤트가 아닌 것?' → SELECT.
트리거 시점·범위 — BA행문 ·트리거·
[정의] 트리거는 '언제(시점)'와 '몇 번(범위)'을 골라 만든다. 두 축의 조합으로 동작이 정해진다.
| 축 | 종류 | 의미 |
|---|---|---|
| 시점 | BEFORE | 이벤트 직전 (입력값 검증·가공) |
| 시점 | AFTER | 이벤트 직후 (로그 기록·후속 작업) |
| 범위 | FOR EACH ROW (행) | 영향받는 행마다 실행 (100건 → 100번) |
| 범위 | FOR EACH STATEMENT (문) | SQL 문장당 1번 (기본값) |
CREATE TRIGGER 트리거명
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON 테이블명
[FOR EACH ROW]
BEGIN
-- 실행할 SQL
END;
🔑 암기 BA행문 — 시점 BEFORE/AFTER · 범위 행(ROW)/문(STATEMENT). 💡 비유 BEFORE = 입국 심사대(들어오기 전 검사) / AFTER = 출국 직후. FOR EACH ROW = 승객 한 명씩 / FOR EACH STATEMENT = 단체 한 번에. 🎯 빈출 시점 2종·범위 2종 매칭. 'FOR EACH ROW와 STATEMENT의 차이' 변형.
NEW·OLD 의사 레코드 ·트리거·
[정의] 트리거 안에서 방금 바뀐 행을 두 이름으로 참조 — NEW = 변경 후 값, OLD = 변경 전 값.
| 이름 | 의미 | INSERT | UPDATE | DELETE |
|---|---|---|---|---|
| NEW | 변경 후 값 | ✅ | ✅ | ❌ |
| OLD | 변경 전 값 | ❌ | ✅ | ✅ |
🔑 즉답 INSERT는 새로 생기니 OLD 없음 / DELETE는 사라지니 NEW 없음 / UPDATE만 둘 다 존재. 🌟 NEW/OLD는 간헐 출제 — '변경 후=NEW, 변경 전=OLD' + 'UPDATE만 둘 다'면 충분.
사용자 정의 함수
사용자 정의 함수 정의 ·함수·
[정의] 값을 입력받아 결과를 RETURN으로 반드시 돌려주는 절차형 SQL. SELECT 등 다른 SQL 안에서 호출 가능. 이 두 키워드(RETURN 필수 + SELECT 안 호출)가 정체성이다.
CREATE FUNCTION calc_discount(p_grade IN VARCHAR2) RETURN NUMBER
IS
v_rate NUMBER;
BEGIN
IF p_grade = 'VIP' THEN v_rate := 0.20;
ELSIF p_grade = 'GOLD' THEN v_rate := 0.10;
ELSE v_rate := 0.00;
END IF;
RETURN v_rate; -- 반드시 값을 돌려준다
END;
함수는 SELECT 안에서 부품처럼 호출된다 — 프로시저로는 불가능한 자리:
SELECT price * (1 - calc_discount(grade)) AS final_price FROM cart;
💡 비유 자판기 — 동전(입력)을 넣으면 음료(결과)를 반드시 돌려준다. RETURN이 없으면 함수가 아니다. 🔑 즉답 'RETURN으로 값 반환' + 'SELECT 안에서 호출 가능' → 사용자 정의 함수. 💡 보충 뷰(View)는 SELECT '안'이 아니라 FROM 절의 테이블 위치에 들어가는 객체 — 함수와 호출 위치가 다르다.
함수 vs 프로시저 — 시험 1순위 ·함수·1순위·
[정의] 12강에서 가장 헷갈리게 내는 짝. 차이만 명확하면 100% 점수다.
| 구분 | 프로시저 | 사용자 정의 함수 |
|---|---|---|
| RETURN | 없음 (또는 OUT) | 반드시 1개 |
| SELECT 안 호출 | 불가능 | 가능 |
| 호출 방식 | EXECUTE / CALL | SELECT 등 SQL 안에서 |
| 매개변수 | IN/OUT/INOUT | IN 위주 (DBMS별) |
| 주 용도 | 일괄 처리·작업 흐름 | 값 계산·조회 보조 |
🔑 암기 함수=RETURN, 프로시저=EXECUTE. 한 줄 회수: '함수는 답을 돌려주고 SELECT 안에 들어가고, 프로시저는 일을 해치우고 EXECUTE로만 부른다.' ⚠️ 함정 거꾸로 적은 보기 4종 — 모두 틀림:
| 함정 보기 | 바로잡기 |
|---|---|
| 프로시저가 RETURN 필수 | RETURN 필수는 함수 |
| 프로시저가 SELECT 안 호출 가능 | SELECT 안 호출은 함수 |
| 함수가 EXECUTE로 호출 | EXECUTE는 프로시저 |
| 함수가 OUT 매개변수 보유 | OUT은 프로시저 매개변수 |
🎯 빈출 매 회차. 'SELECT 안 호출=함수, RETURN 필수=함수, EXECUTE=프로시저' 세 단서면 즉답. 📝 기출 '함수 vs 프로시저 옳은 것?' → 함수는 SELECT 안에서 호출 가능.
프로시저 vs 트리거 vs 함수 종합 — 프트사 한 표 ·종합·1순위·
[정의] 절차형 SQL 매칭 문제를 한 장으로 끝내는 종합표. 12강 기출 다수가 이 표 안에서 풀린다.
| 구분 | 프로시저 | 트리거 | 사용자 정의 함수 |
|---|---|---|---|
| 호출 주체 | 사용자(EXECUTE/CALL) | DBMS 자동 | SELECT 등 SQL 안 |
| 호출 시점 | 원할 때 | DML 이벤트 발생 시 | 값이 필요할 때 |
| RETURN | 없음 | 없음 | 반드시 1개 |
| 매개변수 | IN/OUT/INOUT | 없음(NEW/OLD) | IN 위주 |
| 주 용도 | 일괄 처리·배치 | 자동화·무결성 보강 | 값 계산·재사용 |
| 한 줄 | '부르면' | '알아서' | '답을 돌려준다' |
[흐름] 보기 키워드로 3축 분별:
보기에서 키워드 찾기
│
├─ "EXECUTE / CALL / 사용자 호출" → 프로시저
├─ "INSERT·UPDATE·DELETE 시 자동 실행" → 트리거
└─ "RETURN / SELECT 안에서 호출" → 사용자 정의 함수
🔑 암기 '부르면·알아서·답을 돌려준다' 한 줄. 호출 주체·RETURN 유무·매개변수 3행이 변형 출제 1순위. 🎯 빈출 이 표의 줄 단위로 변형 출제된다. 외워두면 보기 3개가 즉시 분별된다.
예외처리와 커서
예외처리 — EXCEPTION ·예외·
[정의] 절차형 SQL 실행 중 발생하는 오류(예외)를 잡아 프로그램의 비정상 종료를 막는 메커니즘. 선실종예 4부의 마지막 부.
| 분류 | 정의 | 예시 |
|---|---|---|
| 시스템 정의 예외 | DBMS가 미리 만든 표준 예외 | NO_DATA_FOUND · TOO_MANY_ROWS · ZERO_DIVIDE · DUP_VAL_ON_INDEX |
| 사용자 정의 예외 | 개발자가 직접 선언·발생 | '잔액 부족'·'한도 초과' 등 비즈니스 규칙 위반(RAISE로 던짐) |
💡 비유 자동차 에어백 — 평소엔 가만히, 오류가 나는 순간에만 자동 작동. 🔑 즉답 RAISE로 직접 발생 = 사용자 정의 예외 / DBMS가 자동 발생 = 시스템 정의 예외. 분류 기준은 '누가 던졌나'. 🎯 빈출 시스템 vs 사용자 정의 분류 매칭. EXCEPTION이 선실종예 4부에 속하는지 확인.
커서 — CURSOR와 처리 4단계 ·커서·
[정의] SELECT 결과를 한 행씩 순차적으로 가져와 처리하는 포인터. 일반 SELECT는 결과를 한꺼번에 받지만, 행마다 다른 처리가 필요할 때 커서를 쓴다.
| 종류 | 특징 |
|---|---|
| 묵시적 커서 | DBMS가 자동 관리 (SELECT INTO·DML 실행 시) |
| 명시적 커서 | 개발자가 직접 선언·관리 (여러 행을 한 줄씩 처리) |
[흐름] 처리 4단계 — 순서가 시험 본진:
| 단계 | 키워드 | 역할 |
|---|---|---|
| ① 선언 | DECLARE | 커서에 SELECT 결과 묶기 |
| ② 열기 | OPEN | 결과 집합 실행·첫 행 앞에 포인터 두기 |
| ③ 꺼내기 | FETCH | 한 행씩 가져와 변수에 담기 (LOOP 안) |
| ④ 닫기 | CLOSE | 자원 반납 (필수) |
💡 비유 사진첩 — 목록 작성(DECLARE) → 펴기(OPEN) → 한 장씩 넘기기(FETCH) → 닫기(CLOSE). 🔑 즉답 순서 DECLARE → OPEN → FETCH → CLOSE. 'OPEN 다음?' → FETCH, '마지막?' → CLOSE. ⚠️ 함정 CLOSE를 빠뜨리면 커서 자원이 반납 안 돼 누수 발생. '커서 처리 후 반드시 할 일?' → CLOSE. 🎯 빈출 커서 자체는 깊게 안 나온다. 4단계 순서 매칭이 핵심.
기출 다지기
[기출 1 출제] 다음 중 절차형 SQL의 종류에 해당하지 않는 것은? (개념 분류·아닌 것 고르기)
- ① 프로시저(Procedure)
- ② 트리거(Trigger)
- ③ 사용자 정의 함수(User Defined Function)
- ④ 인덱스(Index)
정답 및 해설 보기
정답 ④
절차형 SQL은 프트사 세 종류뿐 — 프로시저·트리거·사용자 정의 함수. 인덱스는 검색 속도를 높이는 자료구조로, SQL 프로그램이 아니다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 프로시저 | 오답 | 절차형 SQL — 사용자 호출(EXECUTE/CALL) |
| ② 트리거 | 오답 | 절차형 SQL — DBMS 자동 실행 |
| ③ 사용자 정의 함수 | 오답 | 절차형 SQL — RETURN으로 값 반환 |
| ④ 인덱스 | 정답 | 검색 성능용 자료구조 — 절차형 SQL 아님 |
🔑 프트사에 없는 인덱스·뷰·시퀀스가 보이면 그게 정답.
[기출 2 출제] 다음 설명에 해당하는 절차형 SQL은? (설명 매칭·개념 식별)
테이블에 INSERT, UPDATE, DELETE 같은 이벤트가 발생할 때
DBMS에 의해 자동으로 실행되는 SQL 프로그램이다.
- ① 프로시저(Procedure)
- ② 트리거(Trigger)
- ③ 사용자 정의 함수(User Defined Function)
- ④ 뷰(View)
정답 및 해설 보기
정답 ②
지문의 핵심 키워드 두 개 — 'INSERT/UPDATE/DELETE 이벤트(삽갱삭)' + 'DBMS가 자동 실행'. 이 교집합은 트리거 하나뿐이다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 프로시저 | 오답 | 사용자가 EXECUTE/CALL로 호출 — 자동 아님 |
| ② 트리거 | 정답 | 삽갱삭 이벤트 + DBMS 자동 실행 |
| ③ 사용자 정의 함수 | 오답 | SQL 안에서 값 반환용 호출 — 자동 아님 |
| ④ 뷰 | 오답 | 가상 테이블 — SQL 프로그램 아님 |
🔑 '이벤트 발생 시 자동 실행' 키워드 → 트리거 즉답.
[기출 3 출제] 프로시저와 트리거에 대한 설명 중 틀린 것은? (옳고 그름·틀린 설명 고르기)
- ① 프로시저는 사용자가 EXECUTE 명령으로 호출한다
- ② 트리거는 INSERT, UPDATE, DELETE 이벤트에 의해 자동 실행된다
- ③ 프로시저는 DB 서버에 미리 컴파일되어 저장된다
- ④ 트리거는 사용자가 CALL 명령으로 명시적으로 호출해야 실행된다
정답 및 해설 보기
정답 ④
트리거는 사용자가 직접 호출하지 않는다. INSERT/UPDATE/DELETE 이벤트가 발생할 때 DBMS가 자동으로 실행하는 것이 핵심이다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답(맞는 설명) | 프로시저는 EXECUTE로 호출 |
| ② | 오답(맞는 설명) | 트리거는 삽갱삭으로 자동 실행 |
| ③ | 오답(맞는 설명) | 프로시저는 미리 컴파일·저장 |
| ④ | 정답(틀린 설명) | 트리거는 자동 실행 — 사용자 CALL 호출 아님 |
🔑 '사용자가 호출하는 트리거' 보기는 100% 함정.
[기출 4 출제] 다음 중 트리거를 발생시키는 이벤트가 아닌 것은? (개념 분류·아닌 것 고르기)
- ① INSERT
- ② UPDATE
- ③ DELETE
- ④ SELECT
정답 및 해설 보기
정답 ④
트리거 이벤트는 삽갱삭 — 데이터를 변경하는 DML 3대장뿐이다. SELECT는 단순 조회라 데이터를 바꾸지 않으므로 트리거 이벤트가 아니다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① INSERT | 오답 | 삽입 — 데이터 변경 |
| ② UPDATE | 오답 | 갱신 — 데이터 변경 |
| ③ DELETE | 오답 | 삭제 — 데이터 변경 |
| ④ SELECT | 정답 | 단순 조회 — 데이터 변경 없음 |
🔑 보기에 SELECT가 있으면 거의 그게 정답. 매 회차 함정 1순위.
[기출 5 출제] 절차형 SQL의 구성 요소에 해당하지 않는 것은? (개념 분류·아닌 것 고르기)
- ① 선언부(DECLARE)
- ② 실행부(BEGIN ~ END)
- ③ 예외부(EXCEPTION)
- ④ 인덱스부(INDEX)
정답 및 해설 보기
정답 ④
절차형 SQL의 구성은 선실종예 4부 — 선언부·실행부·종료부·예외부. 인덱스는 검색 성능 향상용 자료구조로 절차형 SQL 구성과 무관하다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 선언부 | 오답 | DECLARE — 변수·상수 선언 |
| ② 실행부 | 오답 | BEGIN~END — 실제 SQL·흐름 제어 |
| ③ 예외부 | 오답 | EXCEPTION — 오류 처리(선택) |
| ④ 인덱스부 | 정답 | 검색용 자료구조 — 구성 요소 아님 |
🔑 '매개변수부'·'커서부' 같은 가짜가 섞여도 선실종예 4부에 있는지만 확인.
[기출 6 출제] 다음 중 프로시저 매개변수의 종류에 해당하지 않는 것은? (개념 분류·아닌 것 고르기)
- ① IN
- ② OUT
- ③ INOUT
- ④ RETURN
정답 및 해설 보기
정답 ④
프로시저 매개변수는 IN·OUT·INOUT 3종(들어오는 길·나가는 길·왕복). RETURN은 사용자 정의 함수에서 결과값을 돌려줄 때 쓰는 키워드로, 프로시저 매개변수가 아니다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① IN | 오답 | 입력 전용 매개변수 |
| ② OUT | 오답 | 출력 전용 매개변수 |
| ③ INOUT | 오답 | 양방향 매개변수 |
| ④ RETURN | 정답 | 함수 키워드 — 프로시저 매개변수 아님 |
🔑 IN/OUT/INOUT은 프로시저, RETURN은 함수.
[기출 7 출제] 사용자 정의 함수와 프로시저의 차이에 대한 설명 중 옳은 것은? (옳고 그름·옳은 설명 고르기)
- ① 프로시저는 RETURN으로 반드시 값을 돌려줘야 한다
- ② 사용자 정의 함수는 SELECT 문 안에서 호출이 가능하다
- ③ 프로시저는 SELECT 문 안에서 직접 호출할 수 있다
- ④ 사용자 정의 함수는 EXECUTE 명령으로 호출한다
정답 및 해설 보기
정답 ②
함수의 정체성은 'RETURN 필수 + SELECT 안에서 호출 가능'이다. ①③④는 함수와 프로시저의 성질을 거꾸로 적은 함정 보기.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답 | RETURN 필수는 함수(프로시저는 의무 없음) |
| ② | 정답 | 함수는 SELECT 안에서 호출 가능 |
| ③ | 오답 | 프로시저는 SELECT 안 호출 불가(EXECUTE/CALL만) |
| ④ | 오답 | EXECUTE는 프로시저용 호출 명령 |
🔑 'SELECT 안 호출=함수, RETURN 필수=함수, EXECUTE=프로시저' 세 단서면 즉답.
한 장 요약
| 영역 | 핵심 | 암기팁 |
|---|---|---|
| 일반 vs 절차형 | 단발 명령 vs 흐름 제어 + DB 서버 저장 | (미리 컴파일·저장=절차형) |
| 절차형 SQL 3종 | 프로시저(사용자 호출)·트리거(자동)·함수(RETURN) | 프트사 |
| PL/SQL 4부 | 선언(DECLARE)·실행(BEGIN~END)·종료(END;)·예외(EXCEPTION) | 선실종예 |
| 객체 | 핵심 | 암기팁 |
|---|---|---|
| 프로시저 | EXECUTE/CALL 호출 · 미리 저장 · 일괄 배치 | (매개변수 IN·OUT·INOUT) |
| 프로시저 매개변수 | 입력·출력·왕복 (RETURN은 함수 키워드) | IN·OUT·INOUT |
| 트리거 이벤트 | INSERT·UPDATE·DELETE (SELECT는 아님) | 삽갱삭 |
| 트리거 시점·범위 | BEFORE/AFTER · 행(ROW)/문(STATEMENT) | BA행문 |
| 함수 vs 프로시저 | 함수=RETURN+SELECT 안 호출 / 프로시저=EXECUTE | 함수=RETURN, 프로시저=EXECUTE |
| 커서 4단계 | 선언→열기→꺼내기→닫기 | DECLARE→OPEN→FETCH→CLOSE |
🎯 합격 한 끗: 가장 잦은 세 유형 = 절차형 SQL 3종 매칭(프트사) + 트리거 이벤트 SELECT 함정(삽갱삭) + 함수 vs 프로시저 RETURN 차이. 매 회차 출제의 80%. 단골 함정 3종 = '트리거를 사용자가 호출'(→DBMS 자동), 'SELECT가 트리거 이벤트'(→삽갱삭만), '프로시저가 RETURN 필수'(→함수). 다섯 두음(프트사·선실종예·삽갱삭·BA행문·IN·OUT·INOUT) + 함수 vs 프로시저 한 줄이면 12강은 거뜬.
