35.16 GET_DATA2ファンクションのシグネチャ1
このファンクションは、(オプションで検索文字列を指定して制限できる)指定済のSQL問合せを実行し、各列の値を返します。すべての列値は、元のデータ型に従って戻されます。検索列は、p_search_column_no
パラメータに列番号を指定することによって識別されます。このファンクションでは、アプリケーションに定義されている「文字の値の比較」グローバリゼーション属性が考慮されます。
構文
APEX_PLUGIN_UTIL.GET_DATA2 (
p_sql_statement IN VARCHAR2,
p_min_columns IN NUMBER,
p_max_columns IN NUMBER,
p_data_type_list IN wwv_global.vc_arr2 DEFAULT c_empty_data_type_list,
p_component_name IN VARCHAR2,
p_search_type IN VARCHAR2 DEFAULT 2,
p_search_column_no IN VARCHAR2 DEFAULT 2,
p_search_string IN VARCHAR2 DEFAULT NULL,
p_first_row IN NUMBER DEFAULT NULL,
p_max_rows IN NUMBER DEFAULT NULL)
RETURN t_column_value_list2;
パラメータ
表35-19 GET_DATA2のパラメータ
パラメータ | 説明 |
---|---|
p_sql_statement |
参照に使用されるSQL文。 |
p_min_columns |
戻り列の最小数。 |
p_max_columns |
戻り列の最大数。 |
p_data_type_list |
指定する場合は、各列のデータ型が配列内の指定されたデータ型と一致することを確認します。使用可能なデータ型の定数 |
p_component_name |
エラーが戻される場合、エラー・メッセージが表示される際のページ・アイテムまたはレポート列の名前として、この値が使用されます。 |
p_search_type |
次のいずれかのc_search_* 定数である必要があります。
|
p_search_column_no |
SQL文を制限するために使用する列の数。p_min_columns からp_max_columns の範囲内である必要があります。
|
p_search_string |
問合せを制限するために使用する値。 |
p_first_row |
指定した行から問合せを開始します。指定した行より前の行はすべてスキップされます。 |
p_max_rows |
可能な戻り行の最大数。 |
戻り値
表35-20 GET_DATA2の戻り値
戻り値 | 説明 |
---|---|
t_column_value_list2 |
列番号で索引付けされたt_column_values の表
|
例1
次の例では、簡単なアイテム・タイプのプラグインのレンダリング・ファンクションが、ページ・アイテムに定義されたLOVを実行し、ページ・アイテムの現在の値を使用して大/小文字が区別されるLIKE
フィルタ処理を実行しています。その後、結果をHTMLリストとして生成します。ここでは、LOV SQL文の最初の列がVARCHAR2
で、2番目の列がNUMBER
であるかが確認されます。
function render_list (
p_item in apex_plugin.t_page_item,
p_value in varchar2,
p_is_readonly in boolean,
p_is_printer_friendly in boolean )
return apex_plugin.t_page_item_render_result
IS
l_data_type_list apex_application_global.vc_arr2;
l_column_value_list apex_plugin_util.t_column_value_list2;
BEGIN
-- The first LOV column has to be a string and the second a number
l_data_type_list(1) := apex_plugin_util.c_data_type_varchar2;
l_data_type_list(2) := apex_plugin_util.c_data_type_number;
--
l_column_value_list :=
apex_plugin_util.get_data2 (
p_sql_statement => p_item.lov_definition,
p_min_columns => 2,
p_max_columns => 2,
p_data_type_list => l_data_type_list,
p_component_name => p_item.name,
p_search_type => apex_plugin_util.c_search_contains_case,
p_search_column_no => 1,
p_search_string => p_value );
--
sys.htp.p('<ul>');
FOR i in 1 .. l_column_value_list.count
LOOP
sys.htp.p(
'<li>'||
sys.htf.escape_sc(l_column_value_list(1).value_list(i).varchar2_value)|| -- display column
'-'||
sys.htf.escape_sc(l_column_value_list(2).value_list(i).number_value)|| -- return column
'</li>');
END LOOP;
sys.htp.p('</ul>');
END render_list;
例2
次の例では、単純なリージョン・タイプ・プラグインのレンダリング・ファンクションが、そのリージョンに定義されているSQL問合せを実行します。結果はHTMLリストとして生成されます。この例では、SDO_GEOMETRY
などのオブジェクト・タイプ列の高度な処理を示します。
function render (
p_region in apex_plugin.t_region,
p_plugin in apex_plugin.t_plugin,
p_is_printer_friendly in boolean )
return apex_plugin.t_region_render_result
IS
l_column_value_list apex_plugin_util.t_column_value_list2;
l_geometry sdo_geometry;
l_value varchar2(32767);
l_dummy pls_integer;
BEGIN
l_column_value_list :=
apex_plugin_util.get_data2 (
p_sql_statement => p_region.source,
p_min_columns => 1,
p_max_columns => null,
p_component_name => p_region.name );
--
sys.htp.p('<ul>');
FOR row in 1 .. l_column_value_list(1).value_list.count LOOP
sys.htp.p('<li>');
FOR col in 1 .. l_column_value_list.count LOOP
IF l_column_value_list(col).data_type = 'SDO_GEOMETRY' THEN
-- Object Type columns are always returned using ANYDATA and we have to
-- use GETOBJECT to transform them back into the original object type
l_dummy := l_column_value_list(col).value_list(row).anydata_value.getobject(
l_geometry );
l_value := '( type=' || l_geometry.sdo_gtype || ' srid=' || l_geometry.sdo_srid ||
case when l_geometry.sdo_point is not null THEN
',x=' || l_geometry.sdo_point.x ||
',y=' || l_geometry.sdo_point.y ||
',z=' || l_geometry.sdo_point.z
END ||
' )';
ELSE
l_value := apex_plugin_util.get_value_as_varchar2(
p_data_type => l_column_value_list(col).data_type,
p_value => l_column_value_list(col).value_list(row) );
END IF;
sys.htp.p( case when col > 1 then ' - ' END || l_value );
END LOOP;
sys.htp.p('<li>');
END LOOP;
sys.htp.p('<ul>');
RETURN null;
END;
親トピック: APEX_PLUGIN_UTIL