- PR -

日本語のテーブル名・列名に対するSQL文について

投稿者投稿内容
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2004-11-18 01:42
お世話になってます。

現在、ASP.NET/ODP.NETでWebアプリの開発を行っています。
SQLの発行で「式がありません」というOracleエラーが出て困っています。
この現象が起きたのは、
Windows2003Serverで動かした時に起きました。
今まで、テスト機としてWindows2000Serverで動かしていたんですが、
問題なく動いていました。

色々調べた結果、SQLに日本語が入っていると起きるようです。
例)SELECT 項目1,項目2 FROM テストテーブル
例の様なSQLを発行すると文字コードが原因でエラーになるみたいなのですが、
このSQLを
SELECT "項目1","項目2" FROM "テストテーブル"
2重引用符で囲むと2003Serverでも動かせました。

そこで、質問ですが、
1.2000Serverと2003Serverで同じSQLなのになぜ、動きが違うのか?
2.2003Serverで2重引用符を付けなくても発行できるのか?
3.そのやり方はどうするのか?

ご存知の方、どうか教えてください。
宜しくお願いします。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-11-18 11:40
既に対処されたようですが、Oracleだと日本語は2重引用符で囲む必要があります。
囲まなくても正常に動作する場合がありますが、それは「たまたま正常に動作している」に過ぎません。
ですので根本的な解決方法としては「日本語名称を2重引用符で囲む」となります。
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2004-11-18 13:19
ご返事ありがとうございます。

私も色々調べて、Oracleに聞いてみても仕様だといわれました。
気になるのは、

>囲まなくても正常に動作する場合がありますが、それは「たまたま正常に動作している」に過>ぎません。
たまたま正常動作してるとは、どういうことなのでしょうか。
そこの説明とか分かる人いますか?
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2004-11-18 20:36
この問題は、Oracle9iから対応されてるのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-19 19:37
引用:

キヨさんの書き込み(2004-11-18 01:42)より:

そこで、質問ですが、
1.2000Serverと2003Serverで同じSQLなのになぜ、動きが違うのか?
2.2003Serverで2重引用符を付けなくても発行できるのか?
3.そのやり方はどうするのか?


 質問の前にマニュアルを確認しましょうよ。

引用:

『Oracle9i SQLリファレンス, リリース2(9.2)』P2-111「スキーマ・オブジェクトのネーミング規則」より:

非引用識別子は、データベース・キャラクタ・セットのアルファベット文字で開始する必要があります。引用識別子の開始文字には、任意の文字を使用できます。


日本語はアルファベット文字ではないので、引用識別子にする必要があります。

 「たまたま」動作するとはどういうことかといわれても、「運よくできたんだよ」以上のことを説明できる人はいないでしょう。たまたま問題がある文字が使われていなかったので適切に解釈してもらえたとか。。。

 『対応されている』というのは、何がどういう状態になっていることを『対応されている』とするのでしょう?Oracle6の頃から使っている私としては、「名称に日本語は使わない」は常識であり、使用者の方で対応するのが普通なんですけど。。。
 また、『9iから』という表現も気になりますね。今は8i以前をお使いですか?8iはWindows 2003 Serverに非対応ですが、その辺はどうなんでしょう?

_________________
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-11-19 20:50
>Oracle6の頃から使っている私としては、「名称に日本語は使わない」は常識であり

私としては、Oracleに限らず、データベーステーブル、ビューには
日本語を使わないようにしています。

Oracle以外を含めると常識とはいえないとは思いますが、
(Oracleならば常識)
でも、ミスを減らすには、英語以外使用したくないですね。

どうせ、列名がそのままユーザーに表示できる項目ヘッダーとできる
例も少ないし。(マスターコードが絡むと、列名をそのまま
ユーザー表示項目のヘッダーとするのは難しいと思っています。)

todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-11-19 21:17
『対応されている』と『使うのがよい』は違いますね。

たとえば、VS2003.NET/C#で変数等を日本語にしても動きますが(たまたま?仕様?)、とても使う気にはなりません。
 
コード:
private int 変数1;
public int プロパティ1
{
	get {
		return 変数1;
	}
}
public void メソッド1(int 引数1) 
{
}

private void Form1_Load(object sender, System.EventArgs e) 
{
	メソッド1(プロパティ1);
}

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-19 21:29
引用:

todoさんの書き込み (2004-11-19 21:17) より:

たとえば、VS2003.NET/C#で変数等を日本語にしても動きますが(たまたま?仕様?)、とても使う気にはなりません。


 仕様です。unicodeですから。
_________________

スキルアップ/キャリアアップ(JOB@IT)