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

wwv_flow_filesを使用したOracleApexへのファイルのインポート

    ファイル参照ページ項目を使用して、OracleApexのカスタムデータベースプロシージャでcsvファイルコンテンツをインポートするとします。次の手順に従います:Apexでファイル参照ページアイテムを作成し、ファイルを保存するwwv_flow_filesオプションを選択します。次に、ページプロセスを作成し、プロセスの検証オプションとplsqlコードオプションの送信と実行後に選択します。plsql領域に次のコードを記述します。 csvファイルをデータベース(wwv_flow_filesビュー)からサーバードライブにエクスポートしてから、カスタムプロシージャを呼び出して、そのファイルのコンテンツをテーブルにインポートします。DECLARE
    v_upl_blob BLOB;
    vstart Number:=1;
    bytelen Number:=32000;
    len Number;
    my_vr Raw(32000);
    x Number;
    l_output Utl_file.file_type;
    erout varchar2(1000);
    BEGIN
    SELECT blob_content
    INTO v_upl_blob
    FROM wwv_flow_files
    WHERE name =:P25_FB;
    -:p25_fbは、ページ内のファイル参照項目です
    LEN:=Dbms_lob.getlength(V_UPL_BLOB);
    l_output:=Utl_File.fopen('MY_FILES'、:P25_FB、'wb'、32760);
    vstart:=1;
    bytelen:=32000;
    IF len <32760
    Then
    Utl_File.put_raw(l_output、V_UPL_BLOB);
    Utl_File.fflush(l_output);
    その他-分割して書き込む
    vstart:=1;

    WHILE vstart 0
    LOOP
    Dbms_lob.Read(V_UPL_BLOB、bytelen、vstart、my_vr);
    Utl_File.put_raw(l_output、my_vr);
    Utl_File.fflush (l_output);
    -次のカットの開始位置を設定します
    vstart:=vstart + bytelen;
    -32000バイト未満の場合は終了位置を設定します
    x: =x --bytelen;

    IF x <32000
    Then
    bytelen:=x;
    END IF;
    END LOOP;
    END IF;

    Utl_File.fclose(l_output);

    DELETE FROM wwv_flow_files
    WHERE name =:P25_FB;
    COMMIT;
    ---カスタムデータベースプロシージャを呼び出してインポートします...
    yourcustomprocedure(:P25_FB);
    EXCEPTION When Others
    Then
    IF Utl_File.is_Open(l_output)Then
    Utl_File.fclose(L_OUTPUT);
    END IF;
    raise;
    END;

    1. ProxySQLとAWSAuroraを使用したデータベース負荷分散

    2. PostgreSQL 9.1:重複せずに配列内の行を連結する方法、別のテーブルに参加する

    3. SQL主キー

    4. PLSQLを使用してOracleでデータを暗号化する方法