1

次の 2 つのクエリに違いはありますか?

CREATE TABLE alpha(age INTEGER);

CREATE TABLE alpha("age" INTEGER);

引用符で囲まれていない限り、データベースオブジェクトは大文字と小文字を区別しないと読みました。これは、TABLE オブジェクトを引用符で囲んでも、属性に対して機能しない場合に当てはまります。

その理由は、属性がデータベース オブジェクトではないためだと思います。これは正しいです?

はいの場合、データベースオブジェクトでない場合、属性はどのカテゴリに分類されますか?

4

2 に答える 2

2

違いはありますか?はい。

次のように引用符を使用しない場合:

CREATE TABLE alpha(age INTEGER);

Oracle は、その列とテーブルを大文字でデータ ディクショナリに格納します。

つまり、これらのステートメントは同一です。

CREATE TABLE alpha(age INTEGER);
CREATE TABLE "ALPHA"("AGE" INTEGER);
CREATE TABLE ALPHA(AGE INTEGER);

また、テーブルの後続の dml/ddl は次のようになります。

select age from alpha;

オブジェクト/列を検索するときに、最初に大文字に変換されます。したがって、上記の SQL は正常に機能します。つまり、oracle は、入力された列やテーブルではなく、列AGEとテーブルを探します。ALPHAagealpha

ただし、引用符で囲まれた識別子を使用して作成すると、次のようになります。

CREATE TABLE alpha("age" INTEGER);

オラクルはALPHA、小文字の列を持つテーブルを作成しますage(これを確認user_tab_columnsしてください)。そのため、次の方法でのみ選択できます。

select "age" from alpha;
select "age" from "ALPHA";
select "age" from ALPHA;

ではない:

select age from alpha;

例: http://sqlfiddle.com/#!4/3084e/1

于 2013-04-13T01:14:38.603 に答える