2017-10-03 28 views
1

私はhtml形式のplsqlプロシージャを持っています。サブミット・コールがすべての変数を渡すとは限りません。私は通常、これらの変数のデフォルトnullを設定しますが、デフォルトのnullは配列に対しては機能しません。送信を続行できるように配列を空またはnullにデフォルト設定できる方法はありますか?PL/SQL配列デフォルトNULL

procedure p_process(
p_cc_no  varchar2, 
p_pc_no  pc_tm_no_vacant_array, --DEFAULT NULL?? 
p_tm_name name_title_array, --DEFAULT NULL?? 
p_tm_no  pc_tm_no_vacant_array, --DEFAULT NULL?? 
p_job_title name_title_array, --DEFAULT NULL?? 
p_status status_hrs_shift_array, --DEFAULT NULL?? 
p_hrs_per_week status_hrs_shift_array, --DEFAULT NULL?? 
p_shift  status_hrs_shift_array, --DEFAULT NULL?? 
p_open  open_delete_array, --DEFAULT NULL?? 
p_vacant pc_tm_no_vacant_array, --DEFAULT NULL?? 
p_comments long_array, --DEFAULT NULL?? 
p_delete open_delete_array, --DEFAULT NULL?? 
p_orient number default null, 
p_ot  number default null, 
p_buy  number default null) is 

答えて

-1

プロシージャがすべてのパラメータを渡すとは限りません。名前付き表記を使用できます。 名前付き表記では、実際のパラメータは、矢印記号(=>)を使用して仮パラメータに関連付けられます。プロシージャ・コールは、次のようになります:

execute p_process(
p_cc_no  => 'AAA', 
p_orient => 20, 
p_job_title => 'BOSS' 
); 

それとも、混合表記(位置表記が名前の表記を先行すべき)を使用することができます。インターネットで検索「のパラメータを渡すためのPLSQL方法」

execute p_process(
'AAA', 
p_orient => 20, 
p_job_title => 'BOSS' 
); 

を。

0

値を割り当てられていないPL/SQLパッケージ仕様の変数を定義する必要があります。

create package arraytype_pkg is 
    null_pc_tm_no_vacant pc_tm_no_vacant_array; 
    null_name_title name_title_array; 
    ... etc. ... 
end; 

次に、あなたの手順の署名では、これらを参照することができます。

procedure p_process(
p_cc_no  varchar2, 
p_pc_no  pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant, 
p_tm_name name_title_array default arraytype_pkg.null_name_title, 
p_tm_no  pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant, 
p_job_title name_title_array default arraytype_pkg.null_name_title, 
p_status status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift, 
p_hrs_per_week status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift, 
p_shift  status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift, 
p_open  open_delete_array default arraytype_pkg.null_open_delete, 
p_vacant pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant, 
p_comments long_array default arraytype_pkg.null_long, 
p_delete open_delete_array default arraytype_pkg.null_open_delete, 
p_orient number default null, 
p_ot  number default null, 
p_buy  number default null) is 
0

は、あなたが手続きのオーバーロードされたバージョンを作成することができますので、proceureがパッケージの一部であるようです。 1つのバージョンは入力パラメータとして配列を持ちますが、他のバージョンは配列を持ちません。入力パラメータに基づいて、oracleは自動的に正しいプロシージャをコールします。いつかこの概念はラッパーとも呼ばれます。

「 オーバーロードサブプログラム名 PL/SQLを使用して、サブプログラム名と型のメソッドをオーバーロードすることができます。あなたがいる限り彼らの仮パラメータの数、順序、またはデータ型のファミリが異なると、いくつかの異なるサブプログラムに同じ名前を使用することができます。のためにパッケージ内のオーバーロードされたプロシージャの例。例9-3を参照してください。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm#sthref1738

関連する問題