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

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

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

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

Q&A

1回答

36657閲覧

文字列をダブルクォーテーションで囲ってCSVファイルに出力する方法。

nanae2222

総合スコア29

PL/SQL

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

0グッド

0クリップ

投稿2015/09/30 07:01

こんにちは。

pl/sqlで、csvファイルに文字を出力する
プログラムを書いているのですが、
以下のようにダブルクォーテーションを
文字列に連結させてもうまく出力されません。

~~省略

vOUTPUT := '"' || 'しゅつりょく' || '"';
UTL_FILE.PUT_LINE(vHANDLE,vOUTPUT);

~~

上記実行の出力結果↓

現状: しゅつりょく
希望: "しゅつりょく"

なぜダブルクォーテーションが出力されないのでしょうか。
また、どのようにすると表示されますか。

よろしくお願いします。

環境---------
windws8
oracle 10g

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

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

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

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

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

guest

回答1

0

オラクル初心者なので、間違っていたらゴメンなさい。(確認できる環境もないので)

SQL*Plus で文字列だけにダブルクォートをつけて csv 形式で出力する SQL」を参考に考えると、恐らく以下のように「"」(=ダブルクォート)を「''」(=シングルクォート×2)で括る必要があるのではないかと思います。

SQL

1 2vOUTPUT := ''"'' || 'しゅつりょく' || ''"''; 3UTL_FILE.PUT_LINE(vHANDLE,vOUTPUT);

そのように考えた理由ですが(大部分が推測です…)、まず前提知識として

です。

vOUTPUT := '"' || 'しゅつりょく' || '"'; 」 と記述した場合、変数 vOUTPUT の中身は

"」+「しゅつりょく」+「"

ですが、これは「しゅつりょく」というリテラルの「引用識別子」であり、「"しゅつりょく" 」というリテラルを表している訳ではありません。(…と思います。)

そこで、「''」(=シングルクォート×2)→「'」(=シングルクォートを表すリテラル)で「"」(=ダブルクォート)を括って「'"'」というリテラルを作成し、

'"'」+「しゅつりょく」+「'"'

を変数「vOUTPUT」へ代入してやると、「UTL_FILE.PUT_LINE(vHANDLE,vOUTPUT); 」の実行時には「”」(=ダブルクォート)が「’」(=シングルクォート)で括られてエスケープされているので

「UTL_FILE.PUT_LINE(vHANDLE,"しゅつりょく"); 」

を実行するに等しく、想定通り「"しゅつりょく" 」という文字列がファイル出力されることになると思います。

なお、こんな実装例もありましたので、ご参考 まで。

投稿2015/10/01 16:15

pi-chan

総合スコア5936

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問