PL/pgSQL 저장 프로시저 & 함수 — 선언·제어흐름·예외처리 · CI4에서 호출하기
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. CREATE FUNCTION과 CREATE PROCEDURE의 가장 중요한 차이는?
💡 PROCEDURE(PG11+)는 COMMIT, ROLLBACK을 내부에서 실행할 수 있습니다. FUNCTION은 호출자의 트랜잭션 컨텍스트에서 실행되므로 트랜잭션 제어가 불가합니다. FUNCTION은 SELECT에서 호출하고 값을 반환하며, PROCEDURE는 CALL로 호출합니다.
Q2. PL/pgSQL에서 RAISE NOTICE와 RAISE EXCEPTION의 차이는?
💡 RAISE NOTICE는 메시지를 클라이언트에 출력하고 실행을 계속합니다. RAISE EXCEPTION은 오류를 발생시키고 현재 트랜잭션을 롤백합니다. DEBUG, INFO, NOTICE, WARNING은 실행 계속, EXCEPTION만 트랜잭션을 중단합니다.
Q3. RETURNS TABLE 함수를 SELECT에서 호출하는 올바른 방법은?
💡 RETURNS TABLE 함수는 테이블처럼 FROM 절에서 사용합니다. SELECT * FROM func_name() 형태로 호출합니다. CALL은 PROCEDURE 전용이고, EXECUTE는 동적 SQL 실행에 사용합니다.
Q4. SELECT INTO 후 'IF NOT FOUND THEN'을 사용하는 이유는?
💡 SELECT INTO는 결과가 없으면 변수에 NULL을 할당하고 오류를 발생시키지 않습니다. NOT FOUND 특수 변수를 통해 결과 유무를 확인할 수 있습니다. 결과가 없을 때 예외를 던지거나 기본값을 설정하는 데 사용합니다.
Q5. 달러 인용부호($$)를 바꾸는 이유는?
💡 PL/pgSQL 함수 본문 내에 $ 포함된 SQL(예: SELECT $$$)이 있으면 외부 $$ 인용부호와 충돌합니다. 이 경우 $, $, $ 등 임의의 달러 레이블을 사용해 충돌을 피할 수 있습니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.