이름 있는 함수 만들기와 변수 선언
강력한 디버깅 함수를 직접 확인해 보셨으니, 이제 비슷한 함수를 만들어 보겠습니다. 먼저, 함수 이름, 매개변수, 반환 타입을 포함하는 함수 시그니처를 정의하세요. 그다음부터는 DO 함수와 동일한 방식으로 작성하면 됩니다.
이 연습은 강의의 일부입니다
PostgreSQL에서의 트랜잭션과 오류 처리
연습 안내
sql_stmt로 SQL 문을 전달받는debug_statement라는 함수를 정의하세요.- 함수의 반환 타입은
BOOLEAN이어야 합니다. - 함수는 전달된 SQL 문을 실행하고 발생하는 예외를 모두 잡아야 합니다.
- 디버깅이 트리거되면
True, 트리거되지 않으면False를 반환해야 합니다.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
-- Define our function signature
___ ___ ___ ___ debug_statement(
sql_stmt TEXT
)
-- Declare our return type
___ ___ AS $$
DECLARE
exc_state TEXT;
exc_msg TEXT;
exc_detail TEXT;
exc_context TEXT;
BEGIN
BEGIN
-- Execute the statement passed in
___ sql_stmt;
EXCEPTION WHEN others THEN
GET STACKED DIAGNOSTICS
exc_state = RETURNED_SQLSTATE,
exc_msg = MESSAGE_TEXT,
exc_detail = PG_EXCEPTION_DETAIL,
exc_context = PG_EXCEPTION_CONTEXT;
INSERT into errors (msg, state, detail, context) values (exc_msg, exc_state, exc_detail, exc_context);
-- Return True to indicate the statement was debugged
___ ___;
END;
-- Return False to indicate the statement was not debugged
RETURN ___;
END;
$$ LANGUAGE plpgsql;
SELECT debug_statement('INSERT INTO patients (a1c, glucose, fasting) values (20, 89, TRUE);')