创建具名函数并声明变量
既然您已经看到一个强大的调试函数如何工作,现在来亲自构建一个。先定义函数签名,包括函数名、参数以及返回类型。之后的结构与 DO 函数相同。
本练习是课程的一部分
PostgreSQL 中的事务与错误处理
练习说明
- 定义一个名为
debug_statement的函数,接收一个 SQL 语句参数sql_stmt。 - 该函数的返回类型应为
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);')