Aan de slagGa gratis aan de slag

Benoemde functies maken en variabelen declareren

Nu je een krachtige debugfunctie in actie hebt gezien, ga je er zelf een bouwen. Begin met het definiëren van de functiesignatuur: geef de functienaam op, eventuele parameters en een returntype. Vanaf dat punt werkt het hetzelfde als een DO-functie.

Deze oefening maakt deel uit van de cursus

Transacties en foutafhandeling in PostgreSQL

Cursus bekijken

Oefeninstructies

  • Definieer een functie debug_statement die een SQL-statement aanneemt als sql_stmt.
  • Het returntype van de functie moet BOOLEAN zijn.
  • De functie moet het meegegeven SQL-statement uitvoeren en eventuele exceptions afvangen.
  • De functie moet True retourneren als er debugging wordt getriggerd en False als dat niet zo is.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

-- 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);')
Code bewerken en uitvoeren