オラクル超初心者なので、間違っていたらゴメンなさい。(確認できる環境もないので)
「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,"しゅつりょく"
); 」
を実行するに等しく、想定通り「"しゅつりょく"
」という文字列がファイル出力されることになると思います。
なお、こんな実装例もありましたので、ご参考 まで。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。