PL/pgSQLとは?
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''
----
* PL/pgSQLとは? [#reeb6b2d]
PostgreSQLを使用している環境で、PL/pgSQLを使った方が良い...
たとえば、バッチ処理などが該当すると思います。~
バッチ処理プログラムをJava, Ruby, Pythonなどで記述するこ...
(プログラム言語で記述した場合は、データベースが変わっても...
PL/pgSQLは、データベースを操作するプログラム言語になりま...
PL/pgSQLで記述したファンクションは、SELECTやトリガーから...
よく、「スドアド」とか「ストアドプロシージャ」と言われる...
#htmlinsertpcsp(db-top.html,db-sp.html)
#contents
* 関連サイト [#e53564e1]
[[Wikipediaへのリンク>https://ja.wikipedia.org/]]
-[[PL/pgSQL>https://ja.wikipedia.org/wiki/PL/pgSQL]]
-[[ストアドプロシージャ>https://ja.wikipedia.org/wiki/%E3...
* お約束 [#xcea350b]
当サイトに記載されている会社名、製品名などは一般に各社ま...
当サイトの資料により直接的および間接的障害が生じても一切...
自己責任のもとで本資料をご利用ください。
* PL/pgSQLで Hello world! [#m38949d4]
PL/pgSQLでHello worldを作成してみます。~
尚、操作はすべてpsqlコマンドで行います。~
pgAdminIIIでも&color(red){赤枠};で囲んだボタンで実行可能...
または、以下に記すファンクションSQLをpgAdminIIIと関連付け...
(WindowsのpgAdminIII v1.16.1 @ Windows で確認)
#ref(01.png)
以下のPL/pgSQLファンクションは、ターミナル上にHello world...
#ref(helloworld.sql)
-- helloworld.sql
CREATE OR REPLACE FUNCTION helloworld()
RETURNS
TEXT
AS $$
DECLARE
msg text := 'Hello world!';
BEGIN
RAISE INFO '%', msg;
RETURN msg;
END
$$ LANGUAGE plpgsql
;
* helloworldファンクションの登録 [#x766fb47]
上記の&ref(helloworld.sql);をDBに登録する手順を以下に記し...
尚、使用するのはpsqlコマンドとなります。~
pgAdminIII等のGUIツールで動作確認する場合は、読み替えてく...
** cut&pasteで張り付ける [#tf2333f1]
今回、サンプルソースも小さいのでcut&pasteで張り付けてもよ...
+データベースに接続~
今回、テスト用にsakuradbというものを用意しました。皆さん...
+helloworld.sqlの内容を貼り付ける~
pasteすると以下のように表示され、''CREATE FUNCTION''と表...
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
psql (9.6.0, server 9.2.17)
Type "help" for help.
sakuradb=> -- helloworld.sql
sakuradb=>
sakuradb=> CREATE OR REPLACE FUNCTION helloworld()
sakuradb-> RETURNS
sakuradb-> TEXT
sakuradb-> AS $$
sakuradb$> DECLARE
sakuradb$> msg text := 'Hello world!';
sakuradb$> BEGIN
sakuradb$> RAISE INFO '%', msg;
sakuradb$> RETURN msg;
sakuradb$> END
sakuradb$> $$ LANGUAGE plpgsql
sakuradb-> ;
CREATE FUNCTION
sakuradb=>
** psqlコマンドでファンクションを登録する [#ec6eab37]
psqlコマンドを使用してファンクションを登録します。~
オプション-fによりファイルを指定してファンクションを登録...
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
CREATE FUNCTION
* helloworldファンクションを実行 [#f3468706]
上記の操作でhelloworldファンクションの登録が完了しました。~
早速、このファンクションを実行してみます。
+データベースに接続します。
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
psql (9.6.0, server 9.2.17)
Type "help" for help.
sakuradb=>
#br
+helloworldファンクションをSELECT構文を使用して実行します。
sakuradb=> select helloworld();
INFO: Hello world!
helloworld
--------------
Hello world!
(1 row)
ASを使って名称を指定した例です。
sakuradb=> select helloworld() as message;
INFO: Hello world!
message
--------------
Hello world!
(1 row)
INFO: Hello world! と、クエリー結果として Hello world! ...
* ファンクション一覧の確認 [#u358b588]
登録されているファンクションの一覧を確認する場合は、以下...
** ファンクション名のみ [#l9a4ef42]
以下のSQLでファンクション名のみ表示されます。
SELECT p.proname FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
WHERE n.nspname = 'public'
;
***実行例 [#h0cb65b8]
sakuradb=> SELECT p.proname FROM pg_catalog.pg_namespace n
sakuradb-> JOIN pg_catalog.pg_proc p ON p.pronamespace...
sakuradb-> WHERE n.nspname = 'public'
sakuradb-> ;
proname
------------
helloworld
(1 row)
** ファンクション名とスクリプト内容 [#s68b602c]
以下のSQLでファンクション名およびスクリプトが表示されます。
SELECT proname, prosrc FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON pronamespace = n.oid
WHERE nspname = 'public'
;
***実行例 [#k9823da3]
sakuradb=> SELECT proname, prosrc FROM pg_catalog.pg_nam...
sakuradb-> JOIN pg_catalog.pg_proc p ON pronamespace =...
sakuradb-> WHERE nspname = 'public';
proname | prosrc
------------+-----------------------------------
helloworld | \r +
| DECLARE\r +
| msg text := 'Hello world!';\r+
| BEGIN\r +
| RAISE INFO '%', msg;\r +
| RETURN msg;\r +
| END\r +
|
(1 row)
* ファンクションを削除(DROP)する [#ha666bb7]
作成したhelloworldファンクションを削除(DROP)する方法を以...
ファンクションを削除(DROP)する構文は以下の通りです。
DROP FUNCTION ファンクション名
今回作成した、helloworld()ファンクションを削除(DROP)して...
sakuradb=> DROP FUNCTION helloworld();
DROP FUNCTION
削除されたのが確認できます。
sakuradb=> SELECT helloworld();
ERROR: 関数helloworld()は存在しません
LINE 1: SELECT helloworld();
^
HINT: 指定名称、指定引数型に合う関数がありません。明示...
sakuradb=>
* まとめ [#w83dd434]
+CREATE OR REPLACE FUNCTION でファンクションを作成する。
+作成したFUNCTIONを実行すれば登録される。
+SELECT FUNCTION名 で実行できる。
+DROP FUNCTION名 で登録したファンクションを削除できる。
----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''
#htmlinsertpcsp(db-btm.html,db-sp.html)
終了行:
----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''
----
* PL/pgSQLとは? [#reeb6b2d]
PostgreSQLを使用している環境で、PL/pgSQLを使った方が良い...
たとえば、バッチ処理などが該当すると思います。~
バッチ処理プログラムをJava, Ruby, Pythonなどで記述するこ...
(プログラム言語で記述した場合は、データベースが変わっても...
PL/pgSQLは、データベースを操作するプログラム言語になりま...
PL/pgSQLで記述したファンクションは、SELECTやトリガーから...
よく、「スドアド」とか「ストアドプロシージャ」と言われる...
#htmlinsertpcsp(db-top.html,db-sp.html)
#contents
* 関連サイト [#e53564e1]
[[Wikipediaへのリンク>https://ja.wikipedia.org/]]
-[[PL/pgSQL>https://ja.wikipedia.org/wiki/PL/pgSQL]]
-[[ストアドプロシージャ>https://ja.wikipedia.org/wiki/%E3...
* お約束 [#xcea350b]
当サイトに記載されている会社名、製品名などは一般に各社ま...
当サイトの資料により直接的および間接的障害が生じても一切...
自己責任のもとで本資料をご利用ください。
* PL/pgSQLで Hello world! [#m38949d4]
PL/pgSQLでHello worldを作成してみます。~
尚、操作はすべてpsqlコマンドで行います。~
pgAdminIIIでも&color(red){赤枠};で囲んだボタンで実行可能...
または、以下に記すファンクションSQLをpgAdminIIIと関連付け...
(WindowsのpgAdminIII v1.16.1 @ Windows で確認)
#ref(01.png)
以下のPL/pgSQLファンクションは、ターミナル上にHello world...
#ref(helloworld.sql)
-- helloworld.sql
CREATE OR REPLACE FUNCTION helloworld()
RETURNS
TEXT
AS $$
DECLARE
msg text := 'Hello world!';
BEGIN
RAISE INFO '%', msg;
RETURN msg;
END
$$ LANGUAGE plpgsql
;
* helloworldファンクションの登録 [#x766fb47]
上記の&ref(helloworld.sql);をDBに登録する手順を以下に記し...
尚、使用するのはpsqlコマンドとなります。~
pgAdminIII等のGUIツールで動作確認する場合は、読み替えてく...
** cut&pasteで張り付ける [#tf2333f1]
今回、サンプルソースも小さいのでcut&pasteで張り付けてもよ...
+データベースに接続~
今回、テスト用にsakuradbというものを用意しました。皆さん...
+helloworld.sqlの内容を貼り付ける~
pasteすると以下のように表示され、''CREATE FUNCTION''と表...
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
psql (9.6.0, server 9.2.17)
Type "help" for help.
sakuradb=> -- helloworld.sql
sakuradb=>
sakuradb=> CREATE OR REPLACE FUNCTION helloworld()
sakuradb-> RETURNS
sakuradb-> TEXT
sakuradb-> AS $$
sakuradb$> DECLARE
sakuradb$> msg text := 'Hello world!';
sakuradb$> BEGIN
sakuradb$> RAISE INFO '%', msg;
sakuradb$> RETURN msg;
sakuradb$> END
sakuradb$> $$ LANGUAGE plpgsql
sakuradb-> ;
CREATE FUNCTION
sakuradb=>
** psqlコマンドでファンクションを登録する [#ec6eab37]
psqlコマンドを使用してファンクションを登録します。~
オプション-fによりファイルを指定してファンクションを登録...
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
CREATE FUNCTION
* helloworldファンクションを実行 [#f3468706]
上記の操作でhelloworldファンクションの登録が完了しました。~
早速、このファンクションを実行してみます。
+データベースに接続します。
sakura@cygwin ~/PLpgSQL$ psql -U sakura -h localhost sak...
Password for user sakura:
psql (9.6.0, server 9.2.17)
Type "help" for help.
sakuradb=>
#br
+helloworldファンクションをSELECT構文を使用して実行します。
sakuradb=> select helloworld();
INFO: Hello world!
helloworld
--------------
Hello world!
(1 row)
ASを使って名称を指定した例です。
sakuradb=> select helloworld() as message;
INFO: Hello world!
message
--------------
Hello world!
(1 row)
INFO: Hello world! と、クエリー結果として Hello world! ...
* ファンクション一覧の確認 [#u358b588]
登録されているファンクションの一覧を確認する場合は、以下...
** ファンクション名のみ [#l9a4ef42]
以下のSQLでファンクション名のみ表示されます。
SELECT p.proname FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
WHERE n.nspname = 'public'
;
***実行例 [#h0cb65b8]
sakuradb=> SELECT p.proname FROM pg_catalog.pg_namespace n
sakuradb-> JOIN pg_catalog.pg_proc p ON p.pronamespace...
sakuradb-> WHERE n.nspname = 'public'
sakuradb-> ;
proname
------------
helloworld
(1 row)
** ファンクション名とスクリプト内容 [#s68b602c]
以下のSQLでファンクション名およびスクリプトが表示されます。
SELECT proname, prosrc FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON pronamespace = n.oid
WHERE nspname = 'public'
;
***実行例 [#k9823da3]
sakuradb=> SELECT proname, prosrc FROM pg_catalog.pg_nam...
sakuradb-> JOIN pg_catalog.pg_proc p ON pronamespace =...
sakuradb-> WHERE nspname = 'public';
proname | prosrc
------------+-----------------------------------
helloworld | \r +
| DECLARE\r +
| msg text := 'Hello world!';\r+
| BEGIN\r +
| RAISE INFO '%', msg;\r +
| RETURN msg;\r +
| END\r +
|
(1 row)
* ファンクションを削除(DROP)する [#ha666bb7]
作成したhelloworldファンクションを削除(DROP)する方法を以...
ファンクションを削除(DROP)する構文は以下の通りです。
DROP FUNCTION ファンクション名
今回作成した、helloworld()ファンクションを削除(DROP)して...
sakuradb=> DROP FUNCTION helloworld();
DROP FUNCTION
削除されたのが確認できます。
sakuradb=> SELECT helloworld();
ERROR: 関数helloworld()は存在しません
LINE 1: SELECT helloworld();
^
HINT: 指定名称、指定引数型に合う関数がありません。明示...
sakuradb=>
* まとめ [#w83dd434]
+CREATE OR REPLACE FUNCTION でファンクションを作成する。
+作成したFUNCTIONを実行すれば登録される。
+SELECT FUNCTION名 で実行できる。
+DROP FUNCTION名 で登録したファンクションを削除できる。
----
⌣''[[PL/pgSQL入門ページに戻る>PL/pgSQL入門]]''
#htmlinsertpcsp(db-btm.html,db-sp.html)
ページ名: