ORA-00972識別子が長すぎますエイリアス列名


81

私は次のようなクエリを持っています:

SELECT column as averyveryveryverylongalias (more than 30 characters)
   FROM Table_name

エラーORA-00972識別子が長すぎます。エイリアスを短くせずに機能させるためのヒントはありますか?

ありがとう

回答:


104

いいえ、Oracleバージョン12.2より前では、識別子の長さは30文字を超えることはできません。『Oracle SQL言語リファレンス』を参照してください。

ただし、バージョン12.2以降では、最大128バイトの長さにすることができます。(注:文字ではなくバイト)。


23
好奇心から、この制限がどこから来ているのか、そしてなぜ制限が緩和されたことがないのか誰かが知っていますか?それは本当に私のOracleの顧客に支払う数百万ドルのいずれも当たっていない今まで、このような機能(今、私はまだかなり確信してそこにいくつかの深い技術的な理由ですが、午前、間違った私を得ることはありません。)要求
phtrivier

10
さて、私はSO尋ねている可能性が:stackoverflow.com/questions/1378133/...
phtrivier

私もこの状況に遭遇しました。長さ= 32という名前のテーブル列があります。しかし、なぜ、テーブルの列名は30文字を超えることが許可されているのに、同時に識別子は許可されていないのでしょうか。これらの制限は密接に関連しているはずですよね?この状況はどのようにして発生するのでしょうか。
2014年

@Vering 30文字以上ですか、それとも30バイト以上ですか?最後の文字がマルチバイトの場合、識別子が30バイトをわずかに超える可能性があるという奇妙なバグがあります。
Jon Heller

@JonHeller:私はかなり確信していることだった32分の30文字
Vering

12

このエラーは、引用符と単一引用符の扱いがおかしいことによっても発生します。クエリ内に一重引用符を含めるには、二重一重引用符を使用ます。

これは機能しません

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;

マークアップは私の例を変更しました。それは一重引用符一重引用符赤一重引用符一重引用符に等しいはずです
マイクカミング2015

5

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

5

フロントエンドとしてArgosレポートシステムを使用し、バックエンドとしてOracleを使用しています。このエラーが発生したのは、最初に二重引用符があり、最後に一重引用符が付いた文字列が原因でした。二重引用符を一重引用符に置き換えると、問題が解決しました。


0

最近springbootを1.4.3にアップグレードした場合は、ymlファイルに変更を加える必要があるかもしれません。

1.3のyml:

jpa: 
  hibernate: 
    namingStrategy: org.hibernate.cfg.EJB3NamingStrategy

1.4.3のyml:

jpa: 
  hibernate: 
    naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

-2

他の人が言及しているように、OracleSQLの名前は30文字以下でなければなりません。このルールは、テーブル名だけでなくフィールド名にも適用されることを付け加えておきます。だからあなたはそれを持っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.