OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

PL/SQL

  • すぐに回答を!
  • 質問No.217421
  • 閲覧数901
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 25% (1/4)

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

Hensu NVARCHAR2;
と宣言し、

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

Hensu  NVARCHAR2;
Hsensu1 VARCHAR2;
と宣言し、

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

OracleはR8.1.7です。
よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル13

ベストアンサー率 40% (404/988)

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

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

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

でわでわ
お礼コメント
hori_hori

お礼率 25% (1/4)

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

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

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

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

Haizyさんのヒントのおかげでなんとか前に進むことができました。
色々アドバイスしていただいてありがとうございました。
感謝いたします。
投稿日時 - 2002-02-20 22:35:48
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 40% (404/988)

こんにちは。 あぁ~PL/SQL、うろおぼえ~~~で、自身無しですが・・・ Hensu := N || Hsensu1; || パイプ って、文字列結合でしたよね? なので、この命令って、 Nという変数内の文字 と Hsensu1 という変数内の文字を結合して、Hensuに入れろですよね。 NVARCHAR2 ← VARCHAR2 の受け渡しって、そのまま直で、渡せませんでしたっ ...続きを読む
こんにちは。
あぁ~PL/SQL、うろおぼえ~~~で、自身無しですが・・・

Hensu := N || Hsensu1;

|| パイプ って、文字列結合でしたよね?
なので、この命令って、
Nという変数内の文字 と Hsensu1 という変数内の文字を結合して、Hensuに入れろですよね。

NVARCHAR2 ← VARCHAR2 の受け渡しって、そのまま直で、渡せませんでしたっけ?
Hensu := Hsensu1;

ひょっとして、日本語(2バイト文字)化けちゃいます?
補足コメント
hori_hori

お礼率 25% (1/4)

回答ありがとうございます。

NVARCHAR2 ← VARCHAR2 の受け渡しって、そのまま直で、渡せませんでしたっけ?
Hensu := Hsensu1;

上記のように、受け渡すと’キャラクタセットが違います’といった旨のコンパイルエラーが出てしまいます。
そこで、試験的に色々やってみて

Hensu := N'テスト';

がうまくいったので(SQL*PLUSのUPDATEにおいて、NVARCHAR2への更新は'N'をつけるようです)、

Hensu := N || Hsensu1;

といったちょっと浅はかなことをしているのです。
うーん、基本的にPL/SQLでVARCHAR2の変数はつかえないのでしょうか?(そんなことはないと思うけど)
投稿日時 - 2002-02-14 22:29:56
  • 回答No.2
レベル13

ベストアンサー率 40% (404/988)

再び。 そうですか、だめですかぁ~~。残念( ̄- ̄; コンバート関数を、ダミーテーブルで・・・・ select convert(NVARCHAR2, :Hsensu1) from dual で、だめですかね?
再び。

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

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

select convert(NVARCHAR2, :Hsensu1)
from dual

で、だめですかね?
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ