Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Penggunaan kolom tipe BLOB di Oracle APEX

Menyimpan dan Mengakses Lampiran File dalam Tipe Data BLOB Melalui Oracle APEX

Berikut adalah desain skema untuk tabel yang saya gunakan yang berisi kolom data yang diketik BLOB. Catatan:ini bukan desain dari solusi akhir; ikuti saja perubahan yang terjadi sehingga Anda dapat memahami apa yang saya temukan tentang beberapa batasan dari wizard pembuatan Formulir dan Laporan APEX.

Percobaan Pertama:Menyiapkan Tabel, Formulir, dan Laporan APEX

Tabel:MY_DOC_STACK Percobaan Tata Letak Pertama

Kolom DOC_FILE adalah tipe BLOB yang menyimpan lampiran dokumen yang sebenarnya. Ini adalah tampilan Formulir dan Laporan yang dibuat menggunakan wizard Aplikasi APEX yang mengarah langsung ke tabel:

MENAMBAHKAN DOKUMEN ke Bidang yang Diketik BLOB

Kueri laporan tampaknya berfungsi seperti yang ditunjukkan di bawah ini:

Berikut adalah daftar catatan lainnya dengan lampiran dokumen:

Contoh Keluaran Laporan Dengan Beberapa Catatan

Masalahnya adalah ketika mencoba mengunduh file yang dimasukkan ke dalam bidang BLOB:

Ini halus dari gambar, tetapi tipe mime yang diidentifikasi:Application/Octet-Stream adalah indikator bahwa formulir APEX telah kehilangan jejak jenis file (Microsoft Word, docx) yang baru saja saya unggah. File yang disimpan hanyalah sekumpulan karakter sampah. Mencoba mengubah ekstensi file juga tidak membantu.

Upaya Kedua (Revisi):Penyesuaian Desain Aplikasi APEX untuk Penanganan Blob/Dokumen

Meskipun wilayah aplikasi dan komponennya tidak langsung berfungsi setelah wizard selesai, hanya ada beberapa pengeditan kecil untuk membuatnya berfungsi. Pemeriksaan lebih dekat dari elemen formulir PX_DOC_FILE menunjukkan bahwa elemen formulir BLOB memerlukan beberapa meta-informasi tambahan tentang file yang dilampirkan ke catatan:

Saya melanjutkan dan mendefinisikan kolom tambahan dan menambahkannya ke tabel yang berisi BLOB (MY_DOC_STACK), formulir Apex yang diunggah, dan definisi wilayah laporan.

Perhatikan bahwa nama kolom (untuk kesederhanaan) telah dibuat sama dengan persyaratan elemen formulir Blob DOC_FILE .

Formulir Apex Lampiran Dokumen yang Direvisi

Saya awalnya berpikir seseorang harus pintar untuk mengantisipasi semua kemungkinan nilai Jenis Mime (msword, pdf, zip, dll.) tetapi itu tidak perlu. Demikian juga untuk bidang lain yang disediakan untuk tipe karakter, dan kolom yang terakhir diperbarui.

Laporan Unggahan Gumpalan Dokumen yang Direvisi

Diskusi Keluaran Laporan yang Direvisi

  1. [Pemilik:AUDREY HEPBURN]:Saya memaksa MIME_TYPE dengan formulir saya ke "Aplikasi/msword"; meskipun file yang saya unggah adalah jenis ".docx", mengunduhnya kembali melalui halaman Apex menyimpannya ke klien lokal saya sebagai format ".doc" (format MS Word lama).

  2. [Pemilik:CHEVY CHASE]:Kali ini, MIME_TYPE tidak dimasukkan dan proses/tindakan formulir Apex menambahkan ini ke catatan saat dibuat:

    application/vnd.openxmlformats-officedocument.wordprocessingml.document

    Ini mungkin format yang ditunjuk oleh Microsoft Office 2013 . FILE_NAME nilai ditentukan pengguna dan ekstensi .docx ditambahkan secara eksplisit. Hasilnya adalah bahwa mengunduh file meminta pengguna secara default membuka file menggunakan aplikasi yang benar di komputer klien saya:MS Word (Versi 2013).

  3. [Pemilik:CARRIE FISHER]:Sama seperti kasus uji (2) tetapi menggunakan Adobe PDF (Portable Document Format). Perilaku yang sama kecuali MIME_TYPE mengidentifikasi dirinya sebagai aplikasi/pdf; file dibuka seperti yang diharapkan.

Diskusi Lebih Lanjut:

Semua masalah ini berasal dari DML API generik yang digunakan Apex untuk mengelola penyisipan, pembaruan, dan penghapusan dari skema aplikasi, kemungkinan besar itu adalah bagian dari penguatan Apex terhadap serangan injeksi SQL. INSERT direct langsung dan SELECT pernyataan yang digunakan dalam klien SQL Anda tidak dengan cara yang sama seperti desain formulir default (dari wizard aplikasi) diatur untuk mengelola transaksi DML.

Perhatikan bahwa proses halaman:Process Row of MY_DOC_STACK terlihat lebih parameter didorong. Jika ada operasi DML di suatu tempat, pertama-tama akan didasarkan pada penyaringan yang cermat dari setiap variabel input yang dikirimkan melalui formulir Apex.

Ada banyak cara lain agar Apex dapat mengelola transaksi DML; ... solusi ini berfokus pada apa yang kemungkinan besar dihadapi oleh OP.

Semoga Sukses!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql oracle - hapus nilai duplikat

  2. Bagaimana cara menggunakan record untuk mengulang kursor ref?

  3. ORA-20001 di R12 Kumpulkan statistik skema pada 11g(FND_HISTOGRAM_COLS)

  4. Mengelompokkan catatan jam demi jam atau hari demi hari dan mengisi celah dengan nol atau nol di mysql

  5. Menggunakan Oracle JDeveloper 12c dengan Oracle Database 12c di Oracle Cloud Platform, Bagian 1