① 如何用sql語句將Oracle資料庫上的BLOB數據下載到客戶機上
1、客戶機上弄個samba共享目錄。伺服器端映射到本地目錄。directory指向這個本地目錄。
2、客戶機使用ftp,plsql有一些ftp支持包。
3、plsql調用伺服器端的dos 或者 shell 命令。
4、plsql使用java存儲過程解決遠程傳輸的問題。
解決方法很多,第一種最簡單。就是映射遠程目錄即可。
② python如何保存從oracle資料庫中讀取的BLOB文件
import cx_Oracle
con = cx_Oracle.connect(『username』, 『password』, 『dsn』)
blob_sql = "select column_name from table where clause"
cursor = con.cursor()
cursor.execute(blob_sql)
result = cursor.fetchall()
file = open('file_name', "wb")
file.write(result[0][0].read()) #可以print查看result的內容,根據實際情況read
file.close()
③ 如何使用PL/SQL讀取資料庫中的BLOB對象
使用PL/SQL從資料庫中讀取BLOB對象:
1.首先,確認現有對象
SQL> col fdesc for a30
SQL> select fid,fname,fdesc from eygle_blob;
FID FNAME FDESC
------------------------ ------------------------------
1 ShaoLin.jpg 少林寺-康熙手書
2 DaoYing.jpg 倒映
2.創建存儲Directory
SQL> connect / as sysdba
Connected.
SQL> create or replace directory BLOBDIR as 'D:oradataPic';
Directory created.
SQL>
SQL> grant read,write on directory BLOBDIR to eygle;
Grant succeeded.
SQL>
3.創建存儲過程
SQL> connect eygle/eygle
Connected.
SQL>
SQL> CREATE OR REPLACE PROCEDURE eygle_mp_blob (piname varchar2,poname varchar2) IS
2 l_file UTL_FILE.FILE_TYPE;
3 l_buffer RAW(32767);
4 l_amount BINARY_INTEGER := 32767;
5 l_pos INTEGER := 1;
6 l_blob BLOB;
7 l_blob_len INTEGER;
8 BEGIN
9 SELECT FPIC
10 INTO l_blob
11 FROM eygle_blob
12 WHERE FNAME = piname;
13
14 l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
15 l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);
16
17 WHILE l_pos < l_blob_len LOOP
18 DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
19 UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
20 l_pos := l_pos + l_amount;
21 END LOOP;
22
23 UTL_FILE.FCLOSE(l_file);
24
25 EXCEPTION
26 WHEN OTHERS THEN
27 IF UTL_FILE.IS_OPEN(l_file) THEN
28 UTL_FILE.FCLOSE(l_file);
29 END IF;
30 RAISE;
31 END;
32 /
Procere created.
4.最後取出數據
SQL> host ls -l d:oradataPic
total 7618
-rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg
SQL> exec eygle_mp_blob('ShaoLin.jpg','01.jpg')
PL/SQL procere successfully completed.
SQL> host ls -l d:oradataPic
total 11072
-rwxrwxrwa 1 Administrators SYSTEM 1768198 Apr 26 07:16 01.jpg
-rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa 1 gqgai None 1768198 Apr 19 10:12 ShaoLin.jpg
SQL>
SQL> exec eygle_mp_blob('DaoYing.jpg','02.jpg')
PL/SQL procere successfully completed.
SQL> host ls -l d:oradataPic
total 15236
-rwxrwxrwa 1 Administrators SYSTEM 1768198 Apr 26 07:16 01.jpg
-rwxrwxrwa 1 Administrators SYSTEM 2131553 Apr 26 07:19 02.jpg
-rwxrwxrwa 1 gqgai None 2131553 Apr 19 10:12 DaoYing.jpg
-rwxrwxrwa
④ 如何查詢blob類型中存的是什麼格式的文件
資料庫中Blob類型可以存儲二進制數據。
二進制數據可以存儲的范圍比較廣:即可以是文件流,也可以是組合數據。
所以,blob列中存儲的是否是文件,這取決於向此列的存儲邏輯
如果在向列存儲時,直接將文件二進制化,那麼可以反向將二進制數據文件化就可以查看文件。
如果存儲時,除了文件本身,還包含其它信息,則需要將這些額外信息刪除後才能夠寫入文件。
blob列中不一定每行數據都是文件,也許是有條件的存儲(與其它列相關)
即便是文件,也不一定是同一種格式的文件,假如都是圖像文件,但有的行可能是bmp,有的行可能是jpg。在文件化後需要使用正確的打開方式才可以。