当前位置:首页 » 编程语言 » sqlblob文件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlblob文件

发布时间: 2023-08-19 15:56:13

① 如何用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列中存储的是否是文件,这取决于向此列的存储逻辑

  1. 如果在向列存储时,直接将文件二进制化,那么可以反向将二进制数据文件化就可以查看文件。

  2. 如果存储时,除了文件本身,还包含其它信息,则需要将这些额外信息删除后才能够写入文件。

  3. blob列中不一定每行数据都是文件,也许是有条件的存储(与其它列相关)

  4. 即便是文件,也不一定是同一种格式的文件,假如都是图像文件,但有的行可能是bmp,有的行可能是jpg。在文件化后需要使用正确的打开方式才可以。