メインコンテンツにスキップ
モジュール 12 · レッスン 2 / 4コース内の 46/57~15 min
モジュールのレッスン (2/4)

PL/pgSQL を使用した高度なロジック

LANGUAGE sql で記述された関数は、標準クエリを次々に実行することしかできません。 「入力された合計が 100 を超えている場合は、割引を適用する」など、より高度な処理が必要な場合、単純な SQL だけではそれを実行できません。 Postgres に組み込まれている本格的な手続き型プログラミング言語である PL/pgSQL を使用する必要があります。

PL/pgSQL では、BEGIN .. END、変数、条件文で構成される従来の本体を追加します。

SQL
CREATE OR REPLACE FUNCTION valuta_cliente(ordini INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF ordini > 10 THEN
    RETURN 'VIP';
  ELSE
    RETURN 'Standard';
  END IF;
END;
$$ LANGUAGE plpgsql;

この機能により、JS で記述していた反復ロジックの大量のブロックをオフロードし、データの近くで非常に低いレイテンシーで実行される安全で高速な関数にパックすることができます。

自分で試してみてください

運動#sql.m12.l2.e1
試行回数: 0読み込み中…

すでに存在する場合はそれ自体を置き換える複雑な関数 ('get_price_label')、'price' を NUMERIC として受け入れ、詳細な TEXT を返す複雑な関数が必要です。\nPL/pgSQL を使用してください。 BEGIN を開きます。\nロジックを作成します。価格が 100.00 を超える場合は、文字列「Premium」を返します。 ELSE は 'Economico' を返します。\n条件付き END を閉じます。そして体。

エディターを読み込み中…
ヒントを表示

関数の作成または置換 get_price_label(price NUMERIC) 価格 > 100.00 の場合はテキストを $$ BEGIN として返し、その後 'Premium' を返します。 ELSE RETURN 'エコノミコ';終了 IF;終わり; $$ 言語 plpgsql;

3 回の試行後に解決策が利用可能になります

運動#sql.m12.l2.e2
試行回数: 0読み込み中…

DECLARE キーワードを使用して、BEGIN の前に一時変数を宣言できます。\n関数 'saluta_utente(userid INTEGER)' を作成し、TEXT、PL/pgSQL ロジックを返します。\nその中で文字列変数 'nome_utente TEXT;' を DECLARE します。\n次に、BEGIN 内で、特別な句 'SELECT' を使用して 'customers' を動的にクエリして、その変数に first_name を設定します。 first_name INTO nome_utente FROM... WHERE id = userid'。最後に、 RETURN は変数を 'Ciao ' に連結します。

エディターを読み込み中…
ヒントを表示

nome_utente テキストを宣言します。 \nBEGIN SELECT first_name INTO nome_utente... \nRETURN 'Ciao ' || nome_utente;

3 回の試行後に解決策が利用可能になります