- - PR -
カナ文字列の順序を50音順にしたい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-08 16:04
いつもお世話になっております。
Oracle8の文字列検索順序の調整方法について調べています。 アアアア イアアア ウアアア エアアア オアアア ヲアアア をデータに登録した場合、通常は ヲアアア アアアア イアアア ウアアア エアアア オアアア のように並ぶと思います。 (※半角ヲが前に来るということがポイントです。) それでは困ると思い調べたところ、 @Oracle初期化パラメータファイル(C:\orant\DATABASE\initorcl.ora)変更 ファイルの最後に下記を追加 nls_sort=japanese AOS環境変数変更 [システム]-[詳細設定]-[環境変数]にて新規に変数を追加 変数名:NLS_SORT 変数値:japanese @、Aを設定すると アアアア イアアア ウアアア エアアア オアアア ヲアアア のように並ぶとわかったので実行してみました。 テーブル作成後、Oracle Navigaterを開き新規行追加を行ったところ、 char型のフィールドを見ると、自動で'デフォルト値' のように'付きで デフォルト値が入っていました。 で、そのまま主キー項目などを入力してcommitすると下記エラーが発生します。 エラー:ora-00963(式がありません。) これってなにかの制約でしょうか?(または仕様でしょうか?) はたまた対処法などあるのでしょうか? (※Oracle10gで発生するかどうかは現状では確認できていませんが、 多分発生しそうな気がしてます。) または、カナが通常の50音順で並ぶようにする設定方法でも構いません。 (SQLにNLSを追加して対応させるのは、変更量が多いので最後の最後と 考えています。) ご存知の方いらっしゃいましたら、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-06-10 16:33
NLS_SORT=JAPANESEによりソート順を変更する際、制限は特になかったと思います
(2)の環境変数設定が、もしや不要なのではないでしょうか?
NLS_SORTを変更しただけで上記のようなエラーが起こるようになるかどうかについて 上記のようなエラーにあったことが無いため、私に知識はありません。 以下項目についてはどうでしょう? ・初期化パラメータ・ファイル変更後、Oracleを起動しなおしましたでしょうか? ・NLS_SORTの設定を元に戻すとエラーなく動作しますでしょうか? ・NLS_SORTを戻してエラーにならなくなった場合、以下の文を 発行してのソートではどうなるでしょうか? ALTER SESSION SET NLS_SORT=JAPANESE; | ||||||||
|
投稿日時: 2007-06-14 09:50
回答ありがとうございます。
(外出が続いていたため返信が遅れてすみません。) ところで指摘して頂いた事項ですが下記のようになりました。 >・初期化パラメータ・ファイル変更後、Oracleを起動しなおしましたでしょうか? はい >・NLS_SORTの設定を元に戻すとエラーなく動作しますでしょうか? はい >・NLS_SORTを戻してエラーにならなくなった場合、以下の文を > 発行してのソートではどうなるでしょうか? >ALTER SESSION SET NLS_SORT=JAPANESE; 同じようにエラーです。 という残念な結果です。 ところで本件なのですが、どうも列制約でtonumber制約をつけていると 発生するようです。 現状、Oracle8はサポート期間が過ぎているため情報ソースに困っています... (Oracle9i以降は発生しないようです。8iは持ってないのでわかりませんでした。) ただ今回は、私が不在の間に下記のように決定していました。 (正直、変な処理でも時間をかけるよりはマシという判断のようです。) ●回避策 デフォルトのNLSのままで、アプリ側で文字の順番を意識するように 実装変更しました。 (今回は運用で、50音カナ、アルファベット、数字、キーボード上の記号しか 使用しないのでアプリでも何とかできました。) ↑ いやな感じですが、直らないよりはマシという感じです。 一応今回は苦肉の策で解決!?しました。 ありがとうございました。 (DBって難しい...) また質問した際はよろしくお願い致します。 | ||||||||
|
投稿日時: 2007-06-16 21:10
お力になれず、申し訳ありませんでした。
パラメータ設定がおかしくなっているのではないかと考えたのですが、 回答下さった内容からみると、そうではなかったようで。 環境変数への設定ですが、私は必要ないかもと書きましたが どうやら必要な場合もあるようです。 「グローバリゼーション・サポート・ガイド」には 1)SQLへ直接記述 2)ALTER SESSIONでの設定 3)環境変数での設定 4)SPFILEでの設定 の優先度で設定されると記述があるのですが、 WindowsXP + Oracle9i で検証してみたところ、NLS_SORTをSPFILEに設定しても反映してくれず、 環境変数やALTER SESSIONでの設定が必要になりました。
「tonumber制約」というのは知識がなくわからないのですが、 Binary以外のソートセットだとどうやってもエラーが発生してしまいそうな雰囲気ですね。 ですから、
という方法も、影響範囲が狭いならありかとおもいます。 制約を外したりできないのであれば、DB側で何とかするにしても、 どちらにせよアプリの修正も必要になるでしょうから。 |
1