モジュールのレッスン (1/4)
UDF とベース SQL
これまでは Node.js サーバーからクエリを送信してきました。しかし、数十の異なるクエリ (VAT を含む最終価格の計算など) で数式が使用される場合、なぜ JavaScript で計算を繰り返す必要があるのでしょうか? SQL 関数 (ユーザー定義関数 - UDF) を使用すると、DB 自体の中に「マクロ」を作成できます。
数学的 SQL マクロを作成する方法は次のとおりです。
CREATE OR REPLACE FUNCTION calculate_tax(price NUMERIC)
RETURNS NUMERIC AS $$
SELECT price * 1.22;
$$ LANGUAGE sql;このコマンドが実行されると、関数はデータベース内で永久に存続します。任意のクエリから呼び出すことができます。
SELECT name, calculate_tax(unit_price) AS price_with_tax FROM products;ダイナミックな創造
型を指定して変数を必要なだけ定義できます。LANGUAGE sql はクエリを実行し、ドル記号 $$ の間に配置された最後のステートメントを暗黙的に返します。
自分で試してみてください
2 つの TEXT パラメータ ('first_name' TEXT、'last_name' TEXT) を受け入れる、'get_full_name' という名前の単純な呼び出し可能関数を作成します。\nこれは TEXT 値を返す必要があります。\n内部では、2 つの引数を 1 つのスペースで連結する簡単な SELECT を実行し、それを言語 SQL として宣言します。
ヒントを表示
関数の作成または置換 get_full_name(first_name TEXT, last_name TEXT) テキストを $$ として返します SELECT first_name || ' ' ||苗字; $$ 言語 SQL;
3 回の試行後に解決策が利用可能になります
より高度な UDF では、クエリ全体を埋め込むことができます。パラメータを受け入れず INTEGER を返す関数 'get_customer_count()' を作成します。\n内部で、簡単な 'SELECT COUNT(id) FROM Customers' を実行します。\nこれを純粋な SQL 言語として宣言します。
ヒントを表示
注意: COUNT は bigint を返します。戻り値の型と一致するように INTEGER にキャストします。関数の作成または置換 get_customer_count() RETURNS INTEGER AS $$ SELECT CAST(COUNT(id) AS INTEGER) FROM customer; $$ 言語 SQL;
3 回の試行後に解決策が利用可能になります