プライマリ・コンテンツに移動

Oracle® Application Express APIリファレンス リリース5.1 E85937-02 |
| 目次 | 索引

前 | 次 |

# 21.13 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;

パラメータ

表21-14 GET_DATA2のパラメータ

パラメータ | 説明
--- | ---
`p_sql_statement` | 参照に使用されるSQL文。
`p_min_columns` | 戻り列の最小数。
`p_max_columns` | 戻り列の最大数。
`p_data_type_list` | 指定する場合は、各列のデータ型が配列内の指定されたデータ型と一致することを確認します。使用可能なデータ型の定数`c_data_type_*`を使用します。
`p_component_name` | エラーが戻される場合、エラー・メッセージが表示される際のページ・アイテムまたはレポート列の名前として、この値が使用されます。
`p_search_type` | c_search_*定数のいずれかである必要があります。c_search_*定数は、`c_search_contains_case`、`c_search_contains_ignore`、`c_search_exact_case`、`c_search_exact_ignore`です。
`p_search_column_no` | SQL文を制限するために使用する列の数。`p_min_columns`から`p_max_columns`の範囲内である必要があります。
`p_search_string` | 問合せを制限するために使用する値。
`p_first_row` | 指定した行から問合せを開始します。指定した行より前の行はすべてスキップされます。
`p_max_rows` | 可能な戻り行の最大数。

戻り値

表21-15 GET_DATA2の戻り値

戻り値 | 説明
--- | ---
`t_column_value_list2` | 列番号で索引付けされた`t_column_values`の表

例

次の例は、簡単なアイテム・タイプのプラグインのレンダリング・ファンクションを示します。このファンクションは、ページ・アイテムに定義されたLOVを実行し、ページ・アイテムの現在の値を使用して大/小文字が区別されるLIKEフィルタ処理を実行します。また、結果をHTMLリストとして生成します。ここでは、LOV SQL文の最初の列がVARCHAR2型であり、2つ目の列が数値型であることを確認します。

    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(1)
        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;

次の例は、単純なリージョン・タイプ・プラグインのレンダリング・ファンクションで、そのリージョンに定義されている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;