- ベストアンサー
PL/SQL
PL/SQL(Oralce)で、NVARCHAR2の変数を宣言した場合、その変数への代入方法を教えてください。 Hensu NVARCHAR2; と宣言し、 Hensu := N'テスト'; とした場合、コンパイルエラーとなりませんが、 Hensu NVARCHAR2; Hsensu1 VARCHAR2; と宣言し、 Hensu := N || Hsensu1; とした場合、”識別子Nを宣言してください。”旨のコンパイルエラーが出力されていしまいます。 OracleはR8.1.7です。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
三度、失礼。 下のまんまじゃ、あんまりにもわかり辛いので・・・。(^^;;; Hensu := (select convert(NVARCHAR2, :Hsensu1) from dual); で、ダメでしょうか? ORACLEの場合は、dual がダミーテーブル(なはず)です。 これで、SQL文が成立しますので、変数に、値が格納されると思うのですが。 でわでわ
その他の回答 (2)
- Haizy
- ベストアンサー率40% (404/988)
再び。 そうですか、だめですかぁ~~。残念( ̄- ̄; コンバート関数を、ダミーテーブルで・・・・ select convert(NVARCHAR2, :Hsensu1) from dual で、だめですかね?
- Haizy
- ベストアンサー率40% (404/988)
こんにちは。 あぁ~PL/SQL、うろおぼえ~~~で、自身無しですが・・・ Hensu := N || Hsensu1; || パイプ って、文字列結合でしたよね? なので、この命令って、 Nという変数内の文字 と Hsensu1 という変数内の文字を結合して、Hensuに入れろですよね。 NVARCHAR2 ← VARCHAR2 の受け渡しって、そのまま直で、渡せませんでしたっけ? Hensu := Hsensu1; ひょっとして、日本語(2バイト文字)化けちゃいます?
補足
回答ありがとうございます。 NVARCHAR2 ← VARCHAR2 の受け渡しって、そのまま直で、渡せませんでしたっけ? Hensu := Hsensu1; 上記のように、受け渡すと’キャラクタセットが違います’といった旨のコンパイルエラーが出てしまいます。 そこで、試験的に色々やってみて Hensu := N'テスト'; がうまくいったので(SQL*PLUSのUPDATEにおいて、NVARCHAR2への更新は'N'をつけるようです)、 Hensu := N || Hsensu1; といったちょっと浅はかなことをしているのです。 うーん、基本的にPL/SQLでVARCHAR2の変数はつかえないのでしょうか?(そんなことはないと思うけど)
お礼
どうもです。 SQLの組み込み関数(convert)を使ってやってみました。 しかし、以前と同様にキャラクタセットの不一致でエラーとなってしまいました。 →キャラクタセットの設定方法が違うのでしょうか??? それで、他の組み込み関数はないかとあれこれ探したところTRANSLATEという関数を使ってみました。 Hensu := TRANSLATE(Hensu1 USING NCHAR_CS); →'NCHAR_CS'でNCHARやNVARCAR2で使用するキャラクタセットを設定できるとのことです。 するとエラーなしでコンパイルできました。 Haizyさんのヒントのおかげでなんとか前に進むことができました。 色々アドバイスしていただいてありがとうございました。 感謝いたします。