НачатьНачать бесплатно

Создание именованных функций и объявление переменных

Теперь, когда вы увидели мощную функцию отладки в действии, давайте создадим собственную. Начните с определения сигнатуры функции: укажите её имя, параметры и тип возвращаемого значения. После этого всё работает так же, как и в функции 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);')
Редактировать и запускать код