Oracle PL/SQL 作成例と実行例

スポンサーリンク
スポンサーリンク

PL/SQLの使用例

以前にPL/SQLとはなんぞ?ということについてブログで書いてみたけど、詳しい実装については触れていなかったので今回簡単な実装例を提示しておきます\(^o^)/

↓↓↓参考までに前回のPL/SQLの概要についての記事です。

Oracle PL/SQL 無名ブロックとは?ストアドプロシージャとは?

ストアド・プロシージャ

ストアド・プロシージャの定義例

CREATE OR REPLACE PROCEDURE
 --<プロシージャ名>
 -- ここにプロシージャ名を定義します。
 TEST_PROCEDURE
IS
 --<宣言部>
 -- 変数の宣言等を行う。
 var1 VARCHAR2(10) := 'HelloWorld';
 var2 VARCHAR2(100) := '(/・ω・)/PROCEDURE';
BEGIN
 --<実行部>
 -- 実行したいSQLやプログラムを記述する。
 DBMS_OUTPUT.PUT_LINE( var1 || var2 ); 
EXCEPTION
 WHEN OTHERS THEN
  NULL;
END TEST_PROCEDURE;
/

上記の定義をSQL*Plus等で発行するとストアド・プロシージャの定義を作成することができます。

ちなみに「CREATE OR REPLACE」のOR REPLACEは、今定義してあるものがあれば上書きするよって意味なので上書きしたくないときは発行しないようしてください!

SQL> CREATE OR REPLACE PROCEDURE
  2   --<プロシージャ名>
  3   -- ここにプロシージャ名を定義します。
  4   TEST_PROCEDURE
  5  IS
  6   --<宣言部>
  7   -- 変数の宣言等を行う。
  8   var1 VARCHAR2(10) := 'HelloWorld';
  9   var2 VARCHAR2(100) := '(/・ω・)/PROCEDURE';
 10  BEGIN
 11   --<実行部>
 12   -- 実行したいSQLやプログラムを記述する。
 13   DBMS_OUTPUT.PUT_LINE( var1 || var2 );
 14  EXCEPTION
 15   WHEN OTHERS THEN
 16    NULL;
 17  END TEST_PROCEDURE;
 18  /

プロシージャが作成されました。

ストアド・プロシージャの実行例

ストアド・プロシージャは「EXECUTE」コマンドから実行することができます。

※「SET SERVEROUTPUT ON」は、結果を表示するためのものなので、実行に必須ではありません。

SET SERVEROUTPUT ON
EXECUTE TEST_PROCEDURE;
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE TEST_PROCEDURE;
HelloWorld(/・ω・)/PROCEDURE

PL/SQLプロシージャが正常に完了しました。

ストアド・ファンクション

ストアド・ファンクションの定義例

CREATE OR REPLACE FUNCTION
 --<ファンクション名>
 -- ここにファンクション名を定義します。
 TEST_FUNCTION
 --<データ型>
 -- 戻り値のデータ型を宣言する。
RETURN
 VARCHAR2
IS
 --<宣言部>
 -- 変数の宣言等を行う。
 var1 VARCHAR2(20) := 'HelloWorld';
 var2 VARCHAR2(20) := '(/・ω・)/FUNCTION';
BEGIN
 --<実行部>
 -- 実行したいSQLやプログラムを記述する。 
 DBMS_OUTPUT.PUT_LINE( var1 || var2 ); 
 RETURN var1 || var2;
EXCEPTION
 WHEN OTHERS THEN
  NULL;
END TEST_FUNCTION;
/

上記の定義をSQL*Plus等で発行するとストアド・ファンクションの定義を作成することができます。

ちなみにストアド・プロシージャと一緒で「CREATE OR REPLACE」のOR REPLACEは、今定義してあるものがあれば上書きするよって意味なので上書きしたくないときは発行しないようしてください!前の定義が消えちゃいます(´・ω・`)

SQL> CREATE OR REPLACE FUNCTION
  2   --<ファンクション名>
  3   -- ここにファンクション名を定義します。
  4   TEST_FUNCTION
  5   --<データ型>
  6   -- 戻り値のデータ型を宣言する。
  7  RETURN
  8   VARCHAR2
  9  IS
 10   --<宣言部>
 11   -- 変数の宣言等を行う。
 12   var1 VARCHAR2(20) := 'HelloWorld';
 13   var2 VARCHAR2(20) := '(/・ω・)/FUNCTION';
 14  BEGIN
 15   --<実行部>
 16   -- 実行したいSQLやプログラムを記述する。
 17   DBMS_OUTPUT.PUT_LINE( var1 || var2 );
 18   RETURN var1 || var2;
 19  EXCEPTION
 20   WHEN OTHERS THEN
 21    NULL;
 22  END TEST_FUNCTION;
 23  /

ファンクションが作成されました。

ストアド・ファンクションの実行例 「EXECUTE」コマンドでの実行の場合

ストアド・ファンクションは「EXECUTE」コマンドから実行することができます。
ストアド・ファンクションは値を返すための変数を用意します\(^o^)/

※「SET SERVEROUTPUT ON」は、結果を表示するためのものなので、実行に必須ではありません。

SET SERVEROUTPUT ON
VARIABLE vRTN VARCHAR2(100)
EXECUTE :vRTN := TEST_FUNCTION;
SQL> SET SERVEROUTPUT ON
SQL> VARIABLE vRTN VARCHAR2(100)
SQL> EXECUTE :vRTN := TEST_FUNCTION;
HelloWorld(/・ω・)/FUNCTION

PL/SQLプロシージャが正常に完了しました。

ストアド・ファンクションの実行例 SQLの中で実行する場合

SELECT TEST_FUNCTION() FROM DUAL;

こんな風にSQLの中で実行することもできます。今回は引数なしのファンクションを作成しましたが、ファンクション名()のカッコの中身は引数を与えます。\(^o^)/

SQL> SELECT TEST_FUNCTION() FROM DUAL;

TEST_FUNCTION()
---------------------------------------------
HelloWorld(/・ω・)/FUNCTION

ストアド・パッケージの実行例

ストアド・パッケージ仕様部の定義例

CREATE OR REPLACE PACKAGE
  --<パッケージ名>
  -- パッケージ名を定義します。
  TEST_PACKAGE
IS
 --<宣言部>
 -- 変数の宣言等を行う。
 var1 VARCHAR2(20) := 'HelloWorld';
 PROCEDURE test_package_pro;
END TEST_PACKAGE;
/
SQL> CREATE OR REPLACE PACKAGE
  2    --<パッケージ名>
  3    -- パッケージ名を定義します。
  4    TEST_PACKAGE
  5  IS
  6   --<宣言部>
  7   -- 変数の宣言等を行う。
  8   var1 VARCHAR2(20) := 'HelloWorld';
  9   PROCEDURE test_package_pro;
 10  END TEST_PACKAGE;
 11  /

パッケージが作成されました。

ストアド・パッケージ本体の定義例

ストアド・パッケージ本体の定義例です。
現場ではストアド・パッケージ本体とかは呼ばずに「パッケージボディ」ということが多いと思います。
間違いやすいのですが、パッケージ名は仕様部とパッケージ本体を同じにする必要があるので気をつけてください。

CREATE OR REPLACE PACKAGE BODY
 --<パッケージ名>
 -- パッケージ名を定義します。
 TEST_PACKAGE
IS
 --<宣言部>
 -- 変数の宣言等を行う。
 PROCEDURE test_package_pro
  IS
     var2 VARCHAR2(20) := '(/・ω・)/PACKAGE';
  BEGIN
     DBMS_OUTPUT.PUT_LINE( var1 || ' ' || var2);
  END test_package_pro;
END TEST_PACKAGE;
/
SQL> CREATE OR REPLACE PACKAGE BODY
  2   --<パッケージ名>
  3   -- パッケージ名を定義します。
  4   TEST_PACKAGE
  5  IS
  6   --<宣言部>
  7   -- 変数の宣言等を行う。
  8   PROCEDURE test_package_pro
  9    IS
 10       var2 VARCHAR2(20) := '(/・ω・)/PACKAGE';
 11    BEGIN
 12       DBMS_OUTPUT.PUT_LINE( var1 || ' ' || var2);
 13    END test_package_pro;
 14  END TEST_PACKAGE;
 15  /

パッケージ本体が作成されました。

上記の定義をSQL*Plus等で発行するとストアド・パッケージの定義を作成することができます。

ストアド・パッケージ名の実行例 「EXECUTE」コマンドでの実行の場合

ストアド・パッケージは「EXECUTE」コマンドから実行することができます。
「<パッケージ名>.<オブジェクト名>」のように呼び出す事ができます。

SQL> EXECUTE TEST_PACKAGE.test_package_pro;
HelloWorld (/・ω・)/PACKAGE

PL/SQLプロシージャが正常に完了しました。

ちゃんと動作していますね\(^o^)/

無名ブロック

無名ブロックの定義例

SET SERVEROUTPUT ON
--無名ブロックの定義例
DECLARE
 --<宣言部>
 -- 変数の宣言等を行う。
 var1 VARCHAR2(10) := 'Hello';
 var2 VARCHAR2(10) := 'World';
BEGIN
 --<実行部>
 -- 実行したいSQLやプログラムを記述する。
 DBMS_OUTPUT.PUT_LINE( var1 || var2 );
EXCEPTION
 --<例外部>
 -- 例外処理の動作を記述する。
 WHEN OTHERS THEN
  NULL;
END;
/

無名ブロックの実行例

無名ブロックの実行のやり方は、無名ブロック全体をそのまま実行します。

※「SET SERVEROUTPUT ON」は、結果を表示するためのものなので、実行に必須ではありません。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2   --<宣言部>
  3   -- 変数の宣言等を行う。
  4   var1 VARCHAR2(10) := 'Hello';
  5   var2 VARCHAR2(10) := 'World';
  6  BEGIN
  7   --<実行部>
  8   -- 実行したいSQLやプログラムを記述する。
  9   DBMS_OUTPUT.PUT_LINE( var1 || var2 );
 10  EXCEPTION
 11   --<例外部>
 12   -- 例外処理の動作を記述する。
 13   WHEN OTHERS THEN
 14    NULL;
 15  END;
 16  /
HelloWorld

PL/SQLプロシージャが正常に完了しました。

コメント

タイトルとURLをコピーしました