20.28 HAS_MORE_ROWSファンクション

このファンクションは、p_max_rowsをフェッチした後、データ・ソースにさらにデータがあるかどうかを返します。このファンクションは、NEXT_ROWループが終了した後にのみ値を返します。そのときに初めて、フェッチするデータが実際にリクエストされたデータよりも多いことがわかります。

構文

APEX_EXEC.HAS_MORE_ROWS (
    p_context IN t_context )
    return boolean;

パラメータ

表20-26 APEX_EXEC.HAS_MORE_ROWSファンクションのパラメータ

パラメータ 説明

p_context

OPEN ファンクションのいずれかを使用して取得したコンテキスト・オブジェクト。

戻り値

さらにデータがある場合はTRUE、それ以外の場合はFALSEmore data detectionが要求されなかった場合はNULL

次の例では、問合せを実行し、最大10行をフェッチして結果セットを出力します。さらに行がある場合は、さらに行があります: has more rowsというメッセージが表示されます。このサンプル・コードは、「PL/SQL実行」リージョン内で使用できます。

DECLARE
    l_context      apex_exec.t_context;

BEGIN
    l_context := apex_exec.open_query_context(
        p_location          => apex_exec.c_location_local_db,
        p_max_rows          => 10,
        p_sql_query         => 'select * from emp' );

    while apex_exec.next_row( l_context ) loop
        htp.p( 'EMPNO: ' || apex_exec.get_number  ( l_context, 'EMPNO' ) ); 
        htp.p( 'ENAME: ' || apex_exec.get_varchar2( l_context, 'ENAME' ) );
        htp.p( '<br>' );
    END loop;
    IF apex_exec.has_more_rows( l_context ) THEN
        htp.p( 'there are more rows ...' );
    END IF;
    
    apex_exec.close( l_context );
    return;
EXCEPTION
    when others then
        apex_exec.close( l_context );
        raise;    
END;