スタンドアロンのサブプログラムの作成および管理
スタンドアロンのPL/SQLサブプログラムを作成および管理できます。
ノート:このドキュメントのチュートリアルを実行するには、SQL DeveloperからユーザーHRとしてOracle Databaseに接続する必要があります。
サブプログラム構造について
サブプログラムはPL/SQLブロック構造に従います。つまり、サブプログラムには次のものがあります。
-
宣言部(オプション)
宣言部には、型、定数、変数、例外、宣言カーソル、およびネストされたサブプログラムの宣言が含まれます。これらの項目は、サブプログラムに対してローカルで、サブプログラムが実行を完了した時に消滅します。
-
実行可能部(必須)
実行可能部は、値を割り当てる文、制御実行および操作データから構成されます。
-
例外処理部(オプション)
例外処理部には、例外(実行時エラー)を処理するコードがあります。
コメントは、PL/SQLコードの任意の場所に表示される可能性があります。PL/SQLコンパイラは、それらを無視します。プログラムにコメントを追加すると、見やすさが向上し、理解が助けられます。シングルライン・コメントは、二重ハイフン(--)で始まり、ラインの末尾まで拡張されます。マルチライン・コメントは、スラッシュおよびアスタリスク(/*)で始まり、アスタリスクおよびスラッシュ(*/)で終わります。
プロシージャの構造は、次のとおりです。
PROCEDURE name [ ( parameter_list ) ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
機能の構造は、RETURN句と1つ以上のRETURN文(およびこのドキュメントの範囲外の一部のオプションの句)が含まれること以外、プロシージャの体系に似ています。
FUNCTION name [ ( parameter_list ) ] RETURN data_type [ clauses ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
-- at least one statement must be a RETURN statement
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
PROCEDUREまたはFUNCTIONで始まり、ISまたはASの前で終わるコードは、サブプログラム・シグネチャです。宣言部分、実行可能部分および例外処理部は、サブプログラム本体で構成されます。例外ハンドラの構文については、「例外および例外処理について」を参照してください。
関連項目:サブプログラムの一部の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
チュートリアル: スタンドアロンのプロシージャの作成
このチュートリアルは、プロシージャの作成ツールを使用して、行をEVALUATIONS表に追加するADD_EVALUATIONという名前のスタンドアロン・プロシージャを作成する方法を示します。
EVALUATIONS表は、例4-1で作成しました。
スタンドアロン・プロシージャを作成するには、SQL Developerツールのプロシージャの作成またはDDL文CREATE PROCEDUREのいずれかを使用します。
プロシージャの作成ツールを使用してスタンドアロン・プロシージャを作成するステップ:
-
「接続」フレーム内で、hr_connを展開します
-
スキーマ・オブジェクト・タイプのリスト内で、「プロシージャ」を右クリックします。
-
選択肢のリストで、「新規プロシージャ」をクリックします。
「プロシージャの作成」ウィンドウが開きます。
-
「スキーマ」で、デフォルト値のHRを受け入れます。
-
「名前」で、PROCEDURE1を
ADD_EVALUATIONに変更します。 -
「パラメータの追加」アイコンをクリックします。
列のヘッダーの下に1行表示されます。そのフィールドには、デフォルト値(名前:0、モード:1、コピーなし: 選択解除、データ型:2、デフォルト値: 空)が設定されます。
-
「名前」では、PARAM1を
EVALUATION_IDに変更します。 -
「モード」で、デフォルト値のINを受け入れます。
-
「データ型」では、メニューからNUMBERを選択します。
-
「デフォルト値」を空にします。
-
Add a second parameter by repeating steps 6 through 10 with the Name
EMPLOYEE_IDand the Data Type NUMBER. -
「名前」に
EVALUATION_DATEおよび「データ型」DATEを使用して、ステップ6から10を繰り返すことにより、3番目のパラメータを追加します。 -
Add a fourth parameter by repeating steps 6 through 10 with the Name
JOB_IDand the Data Type VARCHAR2. -
Add a fifth parameter by repeating steps 6 through 10 with the Name
MANAGER_IDand the Data Type NUMBER. -
Add a sixth parameter by repeating steps 6 through 10 with the Name
DEPARTMENT_IDand the Data Type NUMBER. -
Add a seventh parameter by repeating steps 6 through 10 with the Name
TOTAL_SCOREand the Data Type NUMBER. -
「OK」をクリックします。
CREATE OR REPLACE PROCEDURE ADD_EVALUATION ( EVALUATION_ID IN NUMBER , EMPLOYEE_ID IN NUMBER , EVALUATION_DATE IN DATE , JOB_ID IN VARCHAR2 , MANAGER_ID IN NUMBER , DEPARTMENT_ID IN NUMBER , TOTAL_SCORE IN NUMBER ) AS BEGIN NULL; END ADD_EVALUATION;ADD_EVALUATIONペインのタイトルがイタリック・フォントになっています。プロシージャがまだデータベースに保存されていないことを示しています。
プロシージャの実行部分にある唯一の文がNULLであるため、プロシージャは何も行いません。
-
NULL文を次の文に置換します。
INSERT INTO EVALUATIONS ( evaluation_id, employee_id, evaluation_date, job_id, manager_id, department_id, total_score ) VALUES ( ADD_EVALUATION.evaluation_id, ADD_EVALUATION.employee_id, ADD_EVALUATION.evaluation_date, ADD_EVALUATION.job_id, ADD_EVALUATION.manager_id, ADD_EVALUATION.department_id, ADD_EVALUATION.total_score );(パラメータ名をプロシージャ名で修飾することにより、同じ名前の列と混同されなくなります。)
-
「ファイル」メニューから、「保存」をクリックします。
Oracle Databaseはプロシージャをコンパイルして保存します。ADD_EVALUATIONペインのタイトルは、イタリック・フォントではなくなりました。メッセージ- ログ・ペインにはCompiledというメッセージが表示されます。
関連情報:
-
Oracle SQL Developer User’s Guide for another example of using SQL Developer to create a standalone procedure
-
CREATE PROCEDURE文に適用される一般情報は、データ定義言語(DDL)文についてを参照してください。
-
CREATE PROCEDURE文の詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。
チュートリアル: スタンドアロンのファンクションの作成
このチュートリアルでは、ファンクションの作成ツールを使用して、3つのパラメータがあり、型NUMBERの値を戻す、CALCULATE_SCOREという名前のスタンドアロン・ファンクションを作成する方法を表示します。
スタンドアロン・ファンクションを作成するには、SQL Developerツールのファンクションの作成またはDDL文CREATE FUNCTIONのいずれかを使用します。
ファンクションの作成ツールを使用してスタンドアロン・ファンクションを作成するステップ:
-
「接続」フレーム内で、hr_connを展開します
-
スキーマ・オブジェクト・タイプのリスト内で、「ファンクション」を右クリックします
-
選択肢のリストで、「新規ファンクション」をクリックします。
「ファンクションの作成」ウィンドウが開きます。
-
「スキーマ」で、デフォルト値のHRを受け入れます。
-
「名前」で、FUNCTION1を
CALCULATE_SCOREに変更します。 -
「戻り型の型」で、メニューからNUMBERを選択します。
-
「パラメータの追加」アイコンをクリックします。
列のヘッダーの下に1行表示されます。そのフィールドには、デフォルト値(名前:0、モード:1、コピーなし: 選択解除、データ型:2、デフォルト値: 空)が設定されます。
-
「名前」で、PARAM1を
catに変更します。 -
「モード」で、デフォルト値のINを受け入れます。
-
「データ型」では、デフォルトのVARCHAR2を受け入れます。
-
「デフォルト値」を空にします。
-
Add a second parameter by repeating steps 7 through 11 with the Name
scoreand the Data Type NUMBER. -
「OK」をクリックします。
CALCULATE_SCOREペインが開き、ファンクションを作成したCREATE FUNCTION文が表示されます:
CREATE OR REPLACE FUNCTION CALCULATE_SCORE ( CAT IN VARCHAR2 , SCORE IN NUMBER , WEIGHT IN NUMBER ) RETURN NUMBER AS BEGIN RETURN NULL; END CALCULATE_SCORE;CALCULATE_SCOREペインのタイトルがイタリック・フォントになっています。ファンクションがまだデータベースに保存されていないことを示しています。
ファンクションの実行部分にある唯一の文がRETURN NULL文であるため、このファンクションは何も行いません。
-
NULLを
score * weightに置き換えます。 -
「ファイル」メニューから、「保存」をクリックします。
Oracle Databaseによって、ファンクションがコンパイルされ、これが保存されます。CALCULATE_SCOREペインのタイトルは、イタリック・フォントではなくなりました。メッセージ- ログ・ペインには
Compiledというメッセージが表示されます。
関連情報:
-
CREATE FUNCTION文に適用される一般情報は、データ定義言語(DDL)文についてを参照してください。
-
CREATE FUNCTION文の詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。
スタンドアロンのサブプログラムの変更
スタンドアロン・サブプログラムを変更するには、SQL Developerツールの「編集」またはDDL文のALTER PROCEDUREまたはALTER FUNCTIONを使用します。
編集ツールを使用してスタンドアロンのサブプログラムを変更するステップ:
-
「接続」フレームのhr_connを開きます。
-
スキーマ・オブジェクト・タイプのリストで、「ファンクション」または「プロシージャ」を展開します。
ファンクションまたはプロシージャのリストが表示されます。
-
変更するファンクションまたはプロシージャをクリックします。
「接続」フレームの右側に、フレームが表示されます。その上部タブに変更するサブプログラムの名前があります。「コード」ペインにサブプログラムを作成したコードが表示されます。
コード・ペインは書込みモードです。(鉛筆アイコンをクリックすると、書込みモードから読取り専用モード(またはその逆)に切り替わります。)
-
コード・ペインでコードを変更します。
ペインのタイトルがイタリック・フォントに変わりますが、これは、変更がまだデータベースに保存されていないことを示します。
-
「ファイル」メニューから、「保存」をクリックします。
Oracle Databaseによってサブプログラムがコンパイルされ、保存されます。保存されると、ペインのタイトルはイタリック・フォントではなくなります。メッセージ- ログ・ペインには
Compiledというメッセージが表示されます。
関連情報:
-
ALTER PROCEDURE文およびALTER FUNCTION文に適用される一般情報は、「データ定義言語(DDL)文について」を参照してください
-
ALTER PROCEDURE文の詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。
-
ALTER FUNCTION文の詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。
チュートリアル: スタンドアロンのファンクションのテスト
このチュートリアルでは、SQL DeveloperツールのRunを使用して、スタンドアロン・ファンクションCALCULATE_SCOREをテストする方法を示します。
実行ツールを使用してCALCULATE_SCORE関数をテストするステップ:
-
「接続」フレーム内で、hr_connを展開します
-
スキーマ・オブジェクト・タイプのリストから、「ファンクション」を展開します
-
ファンクションのリストで、CALCULATE_SCOREを右クリックします。
-
選択肢のリストから、「実行」をクリックします。
PL/SQLの実行ウィンドウが開きます。このPL/SQLブロック・フレームにはこのコードが含まれます。
v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => SCORE, WEIGHT => WEIGHT ); -
SCOREおよびWEIGHTの値をそれぞれ
8および0.2に変更します。v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => 8, WEIGHT => 0.2 ); -
「OK」をクリックします。
コード・ペインの下で、この結果を表示する実行中ウィンドウが開きます。
Connecting to the database hr_conn. Process exited. Disconnecting from the database hr_conn.「実行中」タブの右側に「出力変数」タブがあります。
-
「出力変数」タブをクリックします。
「変数」および「値」の2つのフレームが表示され、それぞれ<Return Value>および1.6と表示されます。
See Also: Oracle SQL Developer User’s Guide for information about using SQL Developer to run and debug procedures and functions
スタンドアロンのサブプログラムの削除
スタンドアロン・サブプログラムを削除するには、SQL Developerの「接続」フレームと削除ツール、またはDDL文DROP PROCEDUREかDROP FUNCTIONのいずれかを使用します。
注意:プロシージャADD_EVALUATIONまたはファンクションCALCULATE_SCOREは、今後のチュートリアルに必要なため、削除しないでください。サブプログラムの削除の実習を行う場合は、簡単なサブプログラムを作成してから削除してください。
削除ツールを使用してスタンドアロンのサブプログラムを削除するステップ:
-
「接続」フレームのhr_connを開きます。
-
スキーマ・オブジェクト・タイプのリストで、「ファンクション」または「プロシージャ」を展開します。
-
ファンクションまたはプロシージャのリストで、削除するファンクションまたはプロシージャの名前を右クリックします。
-
選択肢のリストで、「削除」をクリックします。
-
削除ウィンドウで、「適用」をクリックします。
-
「確認」ウィンドウで、「OK」をクリックします。
関連情報:
-
DROP PROCEDURE文およびDROP FUNCTION文に適用される一般情報は、「データ定義言語(DDL)文について」を参照してください
-
DROP PROCEDURE文の詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
DROP FUNCTION文の詳細は、Oracle Database SQL言語リファレンスを参照してください。