私は次のようなクエリを持っています:
SELECT column as averyveryveryverylongalias (more than 30 characters)
FROM Table_name
エラーORA-00972識別子が長すぎます。エイリアスを短くせずに機能させるためのヒントはありますか?
ありがとう
回答:
いいえ、Oracleバージョン12.2より前では、識別子の長さは30文字を超えることはできません。『Oracle SQL言語リファレンス』を参照してください。
ただし、バージョン12.2以降では、最大128バイトの長さにすることができます。(注:文字ではなくバイト)。
このエラーは、引用符と単一引用符の扱いがおかしいことによっても発生します。クエリ内に一重引用符を含めるには、二重一重引用符を使用します。
これは機能しません
select dbms_xmlgen.getxml("Select ....") XML from dual;
またはこれ
select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;
しかし、これは機能します
select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;
Oracleが識別子の名前を格納するオブジェクト(たとえば、ユーザーのテーブル名はUSER_TABLESという名前のテーブルに格納され、ユーザーの列名はUSER_TAB_COLUMNSという名前のテーブルに格納されます)には、NAME列(たとえば、TABLE_NAME)があります。サイズVarchar2(30)のUSER_TABLES)...そしてそれはオブジェクトまたは識別子のすべてのシステムテーブルを通して均一です-
DBA_ALL_TABLES ALL_ALL_TABLES USER_ALL_TABLES
DBA_PARTIAL_DROP_TABS ALL_PARTIAL_DROP_TABS USER_PARTIAL_DROP_TABS
DBA_PART_TABLES ALL_PART_TABLES USER_PART_TABLES
DBA_TABLES ALL_TABLES USER_TABLES
DBA_TABLESPACES USER_TABLESPACES TAB
DBA_TAB_COLUMNS ALL_TAB_COLUMNS USER_TAB_COLUMNS
DBA_TAB_COLS ALL_TAB_COLS USER_TAB_COLS
DBA_TAB_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS
DBA_TAB_HISTOGRAMS ALL_TAB_HISTOGRAMS USER_TAB_HISTOGRAMS
DBA_TAB_MODIFICATIONS ALL_TAB_MODIFICATIONS USER_TAB_MODIFICATIONS
DBA_TAB_PARTITIONS ALL_TAB_PARTITIONS USER_TAB_PARTITIONS
他の人が言及しているように、OracleSQLの名前は30文字以下でなければなりません。このルールは、テーブル名だけでなくフィールド名にも適用されることを付け加えておきます。だからあなたはそれを持っています。