2016-04-11 24 views
0

私はこのようなクエリを持っています:$this->db->select("SELECT * FROM foo"); テーブル名がFooならば、このスクリプトをすべて実行しています(MySQLのテーブル名は小文字でもあります:foo)。 。oracleテーブル名を大文字と小文字を区別しないようにするには?

SQLSTATE [42S02]::Fooのようにテーブル名を持つオラクルに私が買ってあげるベーステーブルをか見つからないビュー:1146テーブル 'test_db.foo' は

存在しません。なぜなら、オラクルは、FooではなくFooと呼ばれています。これを修正するためのいくつかのアイデアですか?

+1

http://stackoverflow.com/questions/7425153/reason-why-oracle-is-case-sensitiveテーブル名は、引用符で囲まない限り、大文字と小文字を区別しません。 – Barmar

+0

これは奇妙なことですが、引用符にテーブル名を囲んでいません。 – Dillinger

+0

テーブルを作成するときに引用符を使用しましたか? – Barmar

答えて

2

[TL; DR]最も簡単なことは、オブジェクト名を二重引用符で囲み、大文字と小文字の区別をデフォルトの方法で管理できるようにすることです。

Oracleデータベースは、デフォルトで大文字と小文字が区別されます。しかし、デフォルトではすべてを大文字に変換して、大文字と小文字の区別がユーザから抽象化されるようにします。

CREATE TABLE tEsT (column_name NUMBER); 

次に:

SELECT * FROM USER_TABLES; 

出力:

SELECT COUNT(*) FROM test; 
SELECT COUNT(*) FROM Test; 
SELECT COUNT(*) FROM TEST; 
SELECT COUNT(*) FROM tEsT; 

は全て同じ出力と与える

TABLE_NAME 
---------- 
TEST 

(テーブル名が大文字であることに注意してください)を。

あなたは二重引用符を使用する場合、Oracleは、テーブル名に例使用を尊重します:

CREATE TABLE "tEsT" (column_name NUMBER); 

と:

SELECT * FROM USER_TABLES; 

出力:

TABLE_NAME 
---------- 
TEST 
tEsT 

(注: TESTtEsTの2つの表があり、oracleはケースseを尊重しています2番目のものの否定 - 引用符で作成されたもの)。

(注:SELECT * FROM tEsTは最初のテーブルから選択しますが、大文字に変換されていますが、クエリが引用符で区切られていても2番目のテーブルから選択するのにはSELECT * FROM "tEsT"が必要です)。

+0

いいえ、まだ同じエラーです。私は、名前の周りに引用符のないテーブルを作成しました。とにかく私はshow table table table nameを実行すると、テーブル名の周りにバックティック – Dillinger

関連する問題