DO ステートメントを書こう
データクレンジングでは、不正な日付が含まれているデータを受け取ることがよくあります。これにより例外が発生し、SQL ステートメントが停止してしまいますが、例外ハンドラー付きの DO 関数を使えば、処理を最後まで実行できます。ここでは、patients テーブルの created_on 列でそのような例外をどのように扱うかを見ていきます。あわせて、DO 形式の関数も使ってみましょう。
この演習はコースの一部です
PostgreSQL におけるトランザクションとエラー処理
演習の手順
- 例外を捕捉するための
DO関数を作成します。 - トランザクションを BEGIN し、
patientsに行(a1c=5.8、glucose=89、fasting=TRUE、created_on= '37-03-2020 01:15:54')をINSERTします。 EXCEPTIONハンドラーを追加し、エラー時にはerrorsテーブルのdetail列に'bad date'を挿入します。- 言語は
'plpgsql'を指定します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Create a DO $$ function
____ ____
-- BEGIN a transaction block
BEGIN
INSERT INTO patients (a1c, glucose, fasting, created_on)
VALUES (____, ____, ____, '37-03-2020 01:15:54');
-- Add an EXCEPTION
___
-- For all all other type of errors
WHEN others THEN
INSERT INTO errors (msg, detail)
VALUES ('failed to insert', '____');
END;
-- Make sure to specify the language
$$ language '____';
-- Select all the errors recorded
SELECT * FROM errors;