PL/SQL(Oralce)で、NVARCHAR2の変数を宣言した場合、その変数への代入方法を教えてください。

Hensu NVARCHAR2;
と宣言し、

Hensu := N'テスト';
とした場合、コンパイルエラーとなりませんが、

Hensu  NVARCHAR2;
Hsensu1 VARCHAR2;
と宣言し、

Hensu := N || Hsensu1;
とした場合、”識別子Nを宣言してください。”旨のコンパイルエラーが出力されていしまいます。

OracleはR8.1.7です。
よろしくお願いします。

A 回答 (3件)

三度、失礼。


下のまんまじゃ、あんまりにもわかり辛いので・・・。(^^;;;

Hensu := (select convert(NVARCHAR2, :Hsensu1)
from dual);

で、ダメでしょうか?
ORACLEの場合は、dual がダミーテーブル(なはず)です。
これで、SQL文が成立しますので、変数に、値が格納されると思うのですが。

でわでわ
    • good
    • 0
この回答へのお礼

どうもです。
SQLの組み込み関数(convert)を使ってやってみました。
しかし、以前と同様にキャラクタセットの不一致でエラーとなってしまいました。
→キャラクタセットの設定方法が違うのでしょうか???

それで、他の組み込み関数はないかとあれこれ探したところTRANSLATEという関数を使ってみました。

Hensu := TRANSLATE(Hensu1 USING NCHAR_CS);
→'NCHAR_CS'でNCHARやNVARCAR2で使用するキャラクタセットを設定できるとのことです。

するとエラーなしでコンパイルできました。

Haizyさんのヒントのおかげでなんとか前に進むことができました。
色々アドバイスしていただいてありがとうございました。
感謝いたします。

お礼日時:2002/02/20 22:35

再び。



そうですか、だめですかぁ~~。残念( ̄- ̄;

コンバート関数を、ダミーテーブルで・・・・

select convert(NVARCHAR2, :Hsensu1)
from dual

で、だめですかね?
    • good
    • 0

こんにちは。


あぁ~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の変数はつかえないのでしょうか?(そんなことはないと思うけど)

補足日時:2002/02/14 22:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報