1

データを大文字と小文字を区別しないと見なす Oracle 10g の設定はありますか? ここで解決策を見ました。ただし、それはセッションで行われます。私が探しているのは、スキーマまたはテーブルのいずれかで、そのデータを大文字と小文字を区別しないと見なすための設定です。セッション上にある場合は、すべてのストアド プロシージャを変更する必要があります。

4

2 に答える 2

2

スキーマまたはテーブルを「大文字と小文字を区別しない」ようにするオプションはありません。

  • NLS_ パラメータを使用してセッションでそれを行うか、インスタンス全体が影響を受ける db init ファイルで同じことを行うことができます。ただし、これらの検索では、厳密な等価検索の
    場合のみ大文字と小文字が区別されません。

  • LIKE を使用する必要がある場合は、REGEXP_LIKE の使用を検討する必要があります。
    REGEXP_LIKE の場合、NLS_SORT 設定は必要ありません。これは、REGEXP_LIKE に大文字と小文字を区別しないようにするオプションがあるためです。

于 2010-05-10T19:38:32.373 に答える
2

'yun' の ASCII 値は != 'YUN' の ASCII 値であるという単純な理由から、大文字と小文字の区別はコンピューティングの基本です。だから、あなたが言うとき...

大文字と小文字を区別しないデータを考慮する

...検索目的だけですか、それとも保存目的ですか?

すべての検索で大文字と小文字を区別することの問題は次のとおりです。

SQL> create table t23 (id number, name varchar2(20))
  2  /

Table created.

SQL> create unique index  t23_uk on t23(name)
  2  /

Index created.

SQL> insert into t23 values (1, 'SAM-I-AM')
  2  /

1 row created.

SQL> insert into t23 values (2, 'sam-i-am')
  2  /

1 row created.

SQL> select id, name, ascii(name) from t23
  2  /

        ID NAME                 ASCII(NAME)
---------- -------------------- -----------
         1 SAM-I-AM                      83
         2 sam-i-am                     115

SQL>

大文字と小文字を区別しない検索がスキーマまたはテーブル レベルで強制されている場合、どうすれば「sam-I-am」と「SAM-I-AM」を区別できますか?

個々の列レベルではありますが、データストレージの大文字と小文字を区別しないようにすることは、一種の可能性があります。

SQL> delete from t23
  2  /

2 rows deleted.

SQL> drop index t23_uk
  2  /

Index dropped.

SQL> create unique index  t23_uk on t23(upper(name))
  2  /

Index created.

SQL> insert into t23 values (1, 'SAM-I-AM')
  2  /

1 row created.

SQL> insert into t23 values (2, 'sam-i-am')
  2  /
insert into t23 values (2, 'sam-i-am')
*
ERROR at line 1:
ORA-00001: unique constraint (APC.T23_UK) violated


SQL>
于 2010-05-11T05:51:59.680 に答える