【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

SQLクリニック(7) Page 1/3

PL/SQLでBLOBデータを自由自在に入出力


株式会社インサイトテクノロジー
林 優
2005/8/26
本連載はSQLの応用力を身に付けたいエンジニア向けに、さまざまなテクニックを紹介する。SQLの基本構文は平易なものだが、実務で活用するには教科書的な記述を理解するだけでは不十分だ。本連載は、著名なメールマガジン「おら! オラ! Oracle - どっぷり検証生活」を発行するインサイトテクノロジーのコンサルタントを執筆陣に迎え、SQLのセンス向上に役立つ大技小技を紹介していく。(編集局)
主な内容
--Page 1--
Oracleに格納できるLOBの種類
BLOBデータを格納するサンプル
--Page 2--
BLOBデータを格納するサンプルの解説
--Page 3--
BLOBデータを出力するサンプル
BLOBデータを出力するサンプルの解説

 今回は、非常に大きなデータを扱う方法を紹介しましょう。大きなデータを格納する際には、LOB(Large Object)という非構造化データ(バイナリデータや大量のテキストデータ)を使用します。

Oracleに格納できるLOBの種類

 Oracleデータベースに格納できるLOBには、以下の4種類が存在します。

LOBの種類 説明
BFILE データをデータベース内に格納せず、OS上のファイルシステムに記録します
BLOB 音声・画像などのバイナリデータをデータベース内部に格納します
CLOB 大量の文字列データをデータベース内部に格納します(シングルバイト・キャラクタまたはマルチバイト・キャラクタを含む)
NCLOB 大量の文字列データをデータベース内部に格納します(Unicodeキャラクタを含む)
表1 Oracleデータベースに格納できるLOBの種類

 今回は、BLOBについてSQL文でのアクセス方法などを紹介します。BLOBは大量のバイナリデータを格納することができるデータ型です。Pro*CやJavaなどのアプリケーション・プログラムからバイナリデータを読み込んで格納する方法もありますが、ここではPL/SQLで実装する方法を簡単な例で解説します。

BLOBデータを格納するサンプル

サンプルソースのダウンロード

 本記事で解説する例題のサンプルソースを以下からダウンロードできます。アーカイブファイルは3種類の文字コード(SJIS、EUC、UTF-8)を用意してありますので、必要な方を利用してください。

Samples
atmarkit_7_sjis.zip(SJIS用)
atmarkit_7_euc.zip(EUC用)
atmarkit_7_utf-8.zip(UTF-8用)

 内容物は、以下のとおりです。

  • create_ddl.sql
     サンプル用のオブジェクト作成スクリプト
  • atmarkit_7_1.sql
     BLOBデータの格納サンプル
  • atmarkit_7_2.sql
      BLOBデータの出力サンプル

 これらのサンプルコードは、Oracle Database 10.1.0.4で動作を確認しています。

【お知らせ】

記事公開時サンプルコードでは、一部にVARCHAR型が使用されていました。VARCHARデータ型はVARCHAR2データ型と同じ意味で使用されていますが、今後、VARCHARデータ型は、異なる比較セマンティクスで比較される別の可変長文字列のデータ型に変更される予定です。このため、掲載時のサンプルコードのうち、VARCHAR型を使っている部分について、VARCHAR2型に書き換えたうえで、修正版として公開して公開しています(2008/06/11)。

 

 1 set serveroutput on
 2 declare
 3         v_blob_locater  blob;
 4         v_handle        bfile := bfilename('LOB_DATA_PATH',
                                              'maguro1.jpg');
 5
 6         v_amount        pls_integer;
 7         v_doffset       pls_integer := 1;
 8         v_soffset       pls_integer := 1;
 9
10 begin
11         dbms_lob.fileopen(
12                 v_handle,
13                 dbms_lob.file_readonly
14         );
15
16         v_amount := dbms_lob.getlength(v_handle);
17
18         insert into test_blob_data (
19                 id,
20                 data
21         ) values (
22                 seq_test_blob_data.nextval,
23                 empty_blob()
24         ) returning data into v_blob_locater;
25
26         dbms_lob.loadblobfromfile(
27                 v_blob_locater,
28                 v_handle,
29                 v_amount,
30                 v_doffset,
31                 v_soffset
32         );
33         dbms_output.put_line ( 
                  '書き込まれたサイズ : ' || v_doffset || 'Bytes' 
           );
34         commit;
35         dbms_lob.fileclose(v_handle);
36 end;
37 /
リスト1 BLOBデータを格納するPL/SQLサンプル
(表示の都合で改行している個所があります。コードはlist7_1から参照できます)

 それでは、次ページで順を追って解説していきましょう。(次ページへ続く)

  1/3

 Index
連載 SQLクリニック(7)
PL/SQLでBLOBデータを自由自在に入出力
Page 1
・Oracleに格納できるLOBの種類
・BLOBデータを格納するサンプル
  Page 2
・BLOBデータを格納するサンプルの解説
  Page 3
・BLOBデータを出力するサンプル
・BLOBデータを出力するサンプルの解説


SQLクリニック

ホワイトペーパーTechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています