將資料庫照片大欄位下卸到檔案系統,照片檔名以某一個欄位命名
目的:
將資料庫的照片匯入到檔案系統照片的名稱以grid主鍵資料命名照片名稱grid.jpg ,並指定照片的位置存放在資料庫中的位置
1、建立direcory存放照片位置
create directory BLOBDIR as '/expdp_dir1';
grant read ,write on directory to public;
2、在gr_xx 表新增一列存放照片地址
alter table grxer_xx11 add address varchar2(100);
3、建立儲存過程將資料庫照片匯出
create or replace procedure photo_dump(IDENTITYID in varchar2,filename in varchar2) is
l_file UTL_FILE.FILE_TYPE;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob BLOB;
l_blob_len INTEGER;
begin
SELECT photo
INTO l_blob
FROM grxer_xx11 WHERE grid = IDENTITYID and photo is not null;
l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
l_file := UTL_FILE.FOPEN('BLOBDIR',filename,'wb', /*l_blob_len*/32767);
WHILE l_pos < l_blob_len LOOP
DBMS_LOB.READ(l_blob, l_amount, l_pos, l_buffer);
UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
l_pos := l_pos + l_amount;
END LOOP;
UTL_FILE.FCLOSE(l_file);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
IF UTL_FILE.IS_OPEN(l_file) THEN
UTL_FILE.FCLOSE(l_file);
END IF;
RAISE;
end photo_dump;
4、執行匯出照片指令碼 並更新照片位置
declare
begin
for i in (select grid from grxer_xx11 where photo is not null) loop
photo_dump(i.grid,i.grid||'.jpg');
update grxer_xx11 set address='/expdp_dir1/'||i.grid||'.jpg' where grid=i.grid;
commit;
end loop;
end;
/
如果圖片特別多需要進行分批處理,執行以下方案:
sqlplus bjsx/Tzxz0309 <<EOF
declare
begin
for i in ( SELECT grid
FROM ( SELECT ROWNUM AS rowno, t.grid
FROM gr_xx t where photo is not null
AND ROWNUM <= 1000000) table_alias
WHERE table_alias.rowno >= 1) loop
photo_dump1(i.grid,i.grid||'.jpg');
commit;
end loop;
end;
/
EOF
標紅色為分頁寫法。
5、插看執行結果
cd /expdp_dir1/
ll *.jpg
select grid,address from grxer_xx11 where address is not null;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2689254/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫表欄位命名規範資料庫
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- 欄位級資料庫加密推出;瑞幸股價暴跌;Zoom漏洞可洩露照片資料庫加密OOM
- 一個Java檔案解決mybatis呼叫資料庫欄位與Java類檔案屬性不對應JavaMyBatis資料庫
- 快速將下劃線欄位改為駝峰欄位
- 將多個JSON欄位對映到單個Java欄位JSONJava
- MySQL中修改一個資料庫下包含有某個相同欄位的所有表的欄位長度MySql資料庫
- 如何找出兩個文字檔案中有相同欄位的行
- 序列化,資料庫存多個欄位資料資料庫
- 【Mybatis】mapper對映檔案中<sql>標籤的id等欄位爆紅,資料庫表名爆紅。MyBatisAPPSQL資料庫
- /etc/shadow檔案相關欄位的解釋
- MagiName for Mac(數碼照片檔案重新命名工具)Mac
- Java 如何找出兩個文字檔案中有相同欄位的行Java
- mysql-資料庫欄位date datetimeMySql資料庫
- 資料庫設計——冗餘欄位資料庫
- mysql資料庫新增和修改欄位MySql資料庫
- PHP 二維陣列, 按某一個欄位排序PHP陣列排序
- 數碼檔案與資料夾收納術(以照片為例)
- 根據欄位查表名
- 模型資料追加欄位模型
- 資料庫系列:高併發下的資料欄位變更資料庫
- es統計資料去除某個欄位的某些資料
- pydantic 欄位欄位校驗
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- 用友U8增加存貨檔案時提示:資料庫沒有提供的欄位(dvencreatedatetime)資料庫
- 資料庫設計之欄位冗餘資料庫
- 查詢資料庫表及表欄位資料庫
- 各個資料庫存二進位制大檔案的效能測試資料庫
- 教你如何將二進位制檔案匯入到資料庫資料庫
- 帝國cms所有資料庫欄位說明資料庫
- 為什麼資料庫欄位要使用NOT NULL?資料庫Null
- 找到了一個原因 PHP 為什麼用下劃線命名欄位PHP
- 資料庫中欄位資料型別以及約束資料庫資料型別
- 通用首部欄位詳解-四大首部欄位之一
- fastadmin 新增欄位記圖片欄位AST
- C# 實現list=list.OrderBy(q=>q.欄位名).ToList(); 按多個欄位排序C#排序
- sql 統計多個欄位的和(如果欄位中含有 null 的處理)SQLNull
- MySQL 大欄位問題MySql