## PostgreSQL編 ストアードプロシージャとは データベースに保存された一連のSQL文や処理のことで、必要に応じて呼び出して実行することができます。 ### メリット ストアードプロシージャは、以下のようなメリットを持ちます。 • **パフォーマンスの向上**: ストアードプロシージャはデータベースにコンパイルされて保存されるため、呼び出すたびにコンパイルする必要がありません。また、ネットワークのトラフィックを減らすこともできます。 • **セキュリティの強化**: ストアードプロシージャはデータベースの権限管理に従って実行されるため、不正なアクセスや操作を防ぐことができます。 • **再利用性と保守性の向上**: ストアードプロシージャは一度作成すれば、複数のアプリケーションやユーザーから呼び出すことができます。また、変更や修正も容易に行うことができます。 ### ストアードプロシージャを作成するための基本構文 PostgreSQLでは、ストアードプロシージャを作成するためにCREATE PROCEDURE文を使います。 CREATE PROCEDURE文の基本的な構文は以下のようになります。 ```SQL= CREATE [OR REPLACE] PROCEDURE procedure_name (parameters) LANGUAGE language_name AS $$ procedure_body $$; ``` • CREATE [OR REPLACE]: ストアードプロシージャを新規作成するか、既存のものを置き換えるかを指定します。 • procedure_name: ストアードプロシージャの名前を指定します。 • parameters: ストアードプロシージャに渡すパラメーターを指定します。パラメーターはIN, OUT, INOUT, VARIADICのいずれかのモードを持ちます。INは入力パラメーター、OUTは出力パラメーター、INOUTは入出力パラメーター、VARIADICは可変長パラメーターを表します。 • LANGUAGE language_name: ストアードプロシージャの言語を指定します。PostgreSQLでは、SQL, PL/pgSQL, PL/Perl, PL/Pythonなどの言語がサポートされています。 • procedure_body: ストアードプロシージャの本体を記述します。本体は$$で囲まれた文字列リテラルとして表現されます。 ### 具体的な作成例 例えば、以下のようなストアードプロシージャを作成してみます。 ```SQL= CREATE OR REPLACE PROCEDURE insert_customer (IN name VARCHAR(50), IN email VARCHAR(50), OUT id INT) LANGUAGE PLpgSQL AS $$ BEGIN INSERT INTO customers (name, email) VALUES (name, email) RETURNING customer_id INTO id; END; $$; ``` このストアードプロシージャは、customersテーブルに新しい顧客情報を挿入し、その顧客IDを返すものです。nameとemailは入力パラメーターで、idは出力パラメーターです。言語はPL/pgSQLを使っています。 ### ストアードプロシージャを呼び出して実行するための基本構文 ストアードプロシージャを作成したら、CALL文で呼び出して実行することができます。CALL文の基本的な構文は以下のようになります。 ```sql= CALL procedure_name (arguments); ``` :::info • procedure_name: 呼び出すストアードプロシージャの名前を指定します。 • arguments: ストアードプロシージャに渡す引数を指定します。引数は入力パラメーターに対応するものだけでよく、出力パラメーターに対応するものは不要です。 例えば、先ほど作成したストアードプロシージャを呼び出して実行するには、以下のようにします。 CALL insert_customer ('John Doe', 'john.doe@example.com'); ::: ### 参考文献 [ストアドプロシージャの使い方(PostgreSQL)](https://qiita.com/jiyu58546526/items/5dd2cb70fd2f67d5acf9) [日本語公式マニュアル](https://www.postgresql.jp/document/11/html/plpgsql.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.