質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

5096閲覧

Oracleに格納されたPDFファイルの出力を行いたい

mcf220302

総合スコア0

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/03/02 09:13

試行してみましたが解決の糸口が見えず、お知恵を拝借頂けますでしょうか。

目的:
Oracleに格納されたPDFファイルをPDFファイルとして出力したい。
以下試行についてはPL/SQLで実行していますが、難しいようであれば.NetやC++等でツールや
画面等を作成しての出力をする方法も検討したいと考えております。

状況:
Oracleのとあるテーブルに、以下の構成でPDFファイルが③のカラムにバイナリデータとして保存されています。

<テーブル構成>
カラム名(データ型)
①データ番号(NUMBER)
②PDFファイル名(VARCHAR2)
③PDFデータ(LONG RAW)
④PDFデータサイズ(NUMBER)
※一部割愛

試行内容:
①以下サイトを参考に、PL/SQLを作成し、SQL*PLUS上で実行した所、
「-- BLOBデータ列「filedata」のロケータを「v_blob_data」に代入する」の次の行で
「数値または値のエラーが発生しました」とエラー発生。
http://oracle.se-free.com/plsql/d10_blob_get.html

②「v_blob_data 」の型をテーブルと合わせる必要があると考え、blobからlong rawへ変更し再度実行した所、同じ行で
「データ型が一致しません:NUMBERが予想されましたがLONG BINARY」ですとエラー発生

③上記「③PDFデータ(LONG RAW)」の箇所がBLOB型でないのが問題かと考え、
「select ③PDFデータ into v_blob_data from~」の部分を
「select TO_BLOB(③PDFデータ) into v_blob_data from~」と変更して実施するも、同じ行で
「データ型が一致しません:BINARYが予想されましたがLONG BINARYです」とエラー発生

補足情報:
・PDFデータの登録はASP.Netで作成されたツールで行っています。
・該当システムはOSがLinux、DBがOracle、画面がCで作成されています。
・画面では既存の機能として、登録されているPDFを画面表示する機能があります。
(この機能で、取得しようとしたPDFが正しく登録されていることは確認済)

質問自体が初なので、情報が足りない等ありましたらご指摘いただきたく、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nukasa

2022/03/02 10:26

> 画面がCで作成されています。 この部分のアーキテクチャーを詳しく。WebアプリケーションでCGIなのか、GNOMEとかKDEのデスクトップアプリケーションなのか。
guest

回答2

0

PL/SQL の LONG RAW 変数は 32,760 バイトまでしか扱うことは出来ません。

「PL/SQLのデータ型」
https://docs.oracle.com/cd/E57425_01/121/LNPLS/datatypes.htm

なので、LONG RAW を BLOB に変換する必要がありそうです。

「TO_BLOB」
https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions198.htm

これが出来たとしても、PDF は ORACLE サーバーのディレクトリ上に作成されますが、それでいいのでしょうか。

・画面では既存の機能として、登録されているPDFを画面表示する機能があります。

ということなので、PDF のデータをクライアント側にもってくるロジックはあるのですから、それをファイル出力するだけではないでしょうか。

投稿2022/03/03 12:16

KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

LONG関係のデータ型を使うのも不便だからLOBに変換しては?
LONGからLOBへの表列の移行

投稿2022/03/03 03:23

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mcf220302

2022/03/03 08:55

回答ありがとうございます。 該当環境は稼働中の環境であり、テーブルのデータ型の変換は不可(作業時に一時的な変更は出来る可能性が有りますが)となります。 現状の状態で、何か解消方法が考えられますでしょうか。お知恵を拝借できますとありがたく。
Orlofsky

2022/03/03 10:33

LOBに変換したデータをワークテーブルに置いてDBMS_LOBを実行しては? この程度のことに気が付けないと辛いかも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問