sql >> データベース >  >> RDS >> Oracle

明示カーソルのSQLステートメントを返す

    はい、DBMS_SQL.TO_CURSOR_NUMBER を使用してこれを行うことができます。 関数。手順は次のようになります:

    PROCEDURE run_query(p_cur IN OUT SYS_REFCURSOR) IS
        ...
    BEGIN
    
        c := DBMS_SQL.TO_CURSOR_NUMBER(p_cur);
    
        -- get a description of the returned columns
        DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
        ...
    

    次に、次のように呼び出す必要があります:

    declare
    
        l_cur SYS_REFCURSOR;
    
    BEGIN
    
        OPEN l_cur FOR
           select  *
           from    table_a
           where   employee_number     = nvl(p_emp_no, employee_number)
           and     payroll_id          = nvl(p_payroll_id, payroll_id);
           and     business_group_id   = p_bg_id
           ...;
    
        tabletoexcel.run_query(l_cur);
    

    OPEN FOR ステートメントはCLOBを許可します ステートメントとして、サイズに関して実際的な制限はありません。

    設計時にどの列が選択されるかわからないため(少なくとも私はそう思います)、DBMS_SQL.DESCRIBE_COLUMNSを取り除く方法はありません。 およびDBMS_SQL.DEFINE_COLUMN 。それ以外の場合は、FETCHステートメント を使用できます。 DBMS_SQL.FETCH_ROWS(c)の代わりに




    1. 2つの異なるデバイスが同じGCM登録IDを持つことはできますか?

    2. SQLite JSON_PATCH()

    3. NULLを許可するようにMySQL列を変更するにはどうすればよいですか?

    4. VirtualBoxから仮想マシンを削除する方法