8

対話型レポートを作成する必要がありますが、SQL ステートメントを実行する代わりに、pl/sql ステートメントを実行する必要があります。

-----------------------------------------------------------------------------
USER_ID        Name                 1 java 2 php 3 pl/sql / sql 4 Oracle apex
-------------- -------------------- ------ ----- -------------- -------------
3              Amy brown            N      N     Y              N           
4              Sarah woods          N      N     Y              Y           
2              Johnny paterson      Y      Y     Y              Y           
1              John brown           Y      N     Y              Y   

これが apex で実行できない場合、pl/sql を実行したときにその pl/sql ステートメントの結果を csv 形式で保存する方法はありますか?

対話型レポートでは、ユーザーは何も追加または削除できません。閲覧専用です。

ありがとう

4

2 に答える 2

1

Scott が述べたように、1 つのオプションは、refcursor を使用して APEX コレクションを作成し、次に APEX_COLLECTIONS ビューを使用してデータからインタラクティブ グリッドを作成することです。これを示すために例を作成しました。

ヘッダーの前にプリレンダリング プロセスを作成します。このメソッドを使用すると、コレクションが既に存在する場合、またはユーザーがページを更新するたびにデータが更新されない場合に、データを再入力しないようにする追加のロジックを追加できます。

プリレンダリング プロセスのセットアップ

コレクションを生成するソース コード:

DECLARE
    l_ref_cur      SYS_REFCURSOR;

    TYPE user_skill_rec IS RECORD
    (
        user_id        NUMBER,
        name           VARCHAR2 (100),
        java           VARCHAR2 (1),
        php            VARCHAR2 (1),
        plsql_sql      VARCHAR2 (1),
        oracle_apex    VARCHAR2 (1)
    );

    l_user_skill   user_skill_rec;

    FUNCTION get_ref_cursor
        RETURN SYS_REFCURSOR
    IS
        l_cur   SYS_REFCURSOR;
    BEGIN
        OPEN l_cur FOR
            SELECT 3               AS user_id,
                   'Amy brown'     AS name,
                   'N'             AS java,
                   'N'             AS php,
                   'Y'             AS plsql_sql,
                   'N'             AS oracle_apex
              FROM DUAL
            UNION ALL
            SELECT 4 AS user_id, 'Sarah woods', 'N', 'N', 'Y', 'Y' FROM DUAL
            UNION ALL
            SELECT 2 AS user_id, 'Johnny paterson', 'Y', 'Y', 'Y', 'Y' FROM DUAL
            UNION ALL
            SELECT 1 AS user_id, 'John brown', 'Y', 'N', 'Y', 'Y' FROM DUAL;

        RETURN l_cur;
    END;
BEGIN
    l_ref_cur := get_ref_cursor;

    apex_collection.create_or_truncate_collection ('USER_SKILLS');

    LOOP
        FETCH l_ref_cur INTO l_user_skill;

        EXIT WHEN l_ref_cur%NOTFOUND;
        apex_collection.add_member (p_collection_name   => 'USER_SKILLS',
                                    p_n001              => l_user_skill.user_id,
                                    p_c001              => l_user_skill.name,
                                    p_c002              => l_user_skill.java,
                                    p_c003              => l_user_skill.php,
                                    p_c004              => l_user_skill.plsql_sql,
                                    p_c005              => l_user_skill.oracle_apex);
    END LOOP;
END;

次に、データが移入されたのと同じコレクションで APEX_COLLECTIONS ビューを問い合せるインタラクティブ・レポートを作成します:

対話型レポートのセットアップ

ソース クエリ:

select n001, c001, c002, c003, c004, c005
  from apex_collections
 where collection_name = 'USER_SKILLS'
于 2020-09-01T18:11:58.880 に答える
0

テーブル関数を使用できます

https://mfaisal1521.blogspot.com/2019/12/example-of-oracle-pipelined-function.html

また、Apex でデータをエクスポートすることも可能です。データをエクスポートしようとしている場合は、utl_File を使用できますが、データベース サーバーにデータをエクスポートできます。

于 2020-04-19T00:01:44.757 に答える