باستخدام PL/SQL كيف يمكنني الحصول على محتويات الملف في blob؟
سؤال
لدي ملف.أرغب في وضع محتوياته في عمود blob في قاعدة بيانات Oracle الخاصة بي أو في متغير blob في برنامج PL/SQL الخاص بي.ما هي أفضل طريقة للقيام بذلك؟
المحلول
للقيام بذلك بالكامل في PL/SQL، يجب أن يكون الملف موجودًا على الخادم، الموجود في الدليل الذي ستحتاج إلى تحديده في قاعدة البيانات.قم بإنشاء الكائنات التالية:
CREATE OR REPLACE DIRECTORY
BLOB_DIR
AS
'/oracle/base/lobs'
/
CREATE OR REPLACE PROCEDURE BLOB_LOAD
AS
lBlob BLOB;
lFile BFILE := BFILENAME('BLOB_DIR', 'filename');
BEGIN
INSERT INTO table (id, your_blob)
VALUES (xxx, empty_blob())
RETURNING your_blob INTO lBlob;
DBMS_LOB.OPEN(lFile, DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(lBlob, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(DEST_LOB => lBlob,
SRC_LOB => lFile,
AMOUNT => DBMS_LOB.GETLENGTH(lFile));
DBMS_LOB.CLOSE(lFile);
DBMS_LOB.CLOSE(lBlob);
COMMIT;
END;
/
نصائح أخرى
يعتمد قليلا على البيئة الخاصة بك.في Java يمكنك القيام بذلك بشيء من هذا القبيل ...
// Need as OracleConnection in mConnection
// Set an EMPTY_BLOB()
String update = "UPDATE tablename"+
" SET blob_column = EMPTY_BLOB()"+
" WHERE ID = "+id;
CallableStatement stmt = mConnection.prepareCall(update);
stmt.executeUpdate();
// Lock the row FOR UPDATE
String select = "BEGIN " +
" SELECT " + blob_column
" INTO ? " +
" FROM " + tablename +
" WHERE ID = '" + id + "'" +
" FOR UPDATE; " +
"END;";
stmt = mConnection.prepareCall(select);
stmt.registerOutParameter(1, java.sql.Types.BLOB);
stmt.executeUpdate();
BLOB blob = (BLOB) stmt.getBlob(1);
OutputStream bos = blob.setBinaryStream(0L);
FileInputStream fis = new FileInputStream(file);
// Code needed here to copy one stream to the other
fis.close();
bos.close();
stmt.close();
mConnection.commit();
لكن الأمر يعتمد حقًا على البيئة/الأدوات التي تستخدمها.مزيد من المعلومات اللازمة.
لا تنتمي إلى StackOverflow