Der ORA-00972-Bezeichner ist ein zu langer Aliasspaltenname


81

Ich habe eine Frage wie:

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

Es wird der Fehler zurückgegeben. Die ORA-00972-Kennung ist zu lang. Gibt es einen Tipp, damit sie funktioniert, ohne den Alias ​​zu verkürzen?

Vielen Dank

Antworten:


104

Nein, vor Oracle Version 12.2 dürfen Bezeichner nicht länger als 30 Zeichen sein. Siehe die Oracle SQL-Sprachreferenz .

Doch ab der Version 12.2 können sie bis zu 128 Byte lang sein. (Hinweis: Bytes, keine Zeichen).


23
Weiß jemand aus Neugier, woher diese Einschränkung kommt und warum die Grenze nie gelockert wurde? Es fällt mir wirklich auf, dass keiner der millionenschweren zahlenden Kunden von Oracle jemals eine solche Funktion angefordert hat (verstehen Sie mich jetzt nicht falsch, ich bin mir ziemlich sicher, dass es einen tiefen technischen Grund gibt, aber immer noch ...)
phtrivier

10
Okay, ich hätte SO fragen können
phtrivier

Ich bin auch auf diese Situation gestoßen. Ich habe eine Tabellenspalte mit Namenslänge = 32. Aber warum um alles in der Welt darf ein Tabellenspaltenname mehr als 30 Zeichen enthalten, während ein Bezeichner dies nicht ist? Diese Grenzen sollten Hand in Hand gehen, oder? Wie kann diese Situation überhaupt entstehen?
Vering

@Vering Sind es mehr als 30 Zeichen oder mehr als 30 Bytes? Es gibt einen seltsamen Fehler, bei dem ein Bezeichner etwas mehr als 30 Byte betragen kann, wenn das letzte Zeichen ein Multibyte ist.
Jon Heller

@ JonHeller: Ich bin mir ziemlich sicher, dass es 30/32 Zeichen waren
Vering

12

Der Fehler wird auch durch die skurrile Behandlung von Anführungszeichen und einzelnen Qutos verursacht. Verwenden Sie doppelte einfache Anführungszeichen, um einfache Anführungszeichen in die Abfrage aufzunehmen .

Das wird nicht funktionieren

select dbms_xmlgen.getxml("Select ....") XML from dual;

oder das auch nicht

select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;

aber das funktioniert

select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;

Das Markup hat mein Beispiel geändert. Es sollte etwas sein, das einem einfachen Anführungszeichen entspricht.
Einfaches

5

Das Objekt, in dem Oracle den Namen der Bezeichner speichert (z. B. die Tabellennamen des Benutzers werden in der Tabelle USER_TABLES und die Spaltennamen des Benutzers in der Tabelle USER_TAB_COLUMNS gespeichert), enthält die Spalten NAME (z. B. TABLE_NAME) in USER_TABLES) der Größe Varchar2 (30) ... und es ist durch alle Systemtabellen von Objekten oder Bezeichnern einheitlich -

 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

Ich verwende das Argos-Berichtssystem als Front-End und Oracle als Back-End. Ich bin gerade auf diesen Fehler gestoßen und er wurde durch eine Zeichenfolge mit einem doppelten Anführungszeichen am Anfang und einem einfachen Anführungszeichen am Ende verursacht. Das Ersetzen des doppelten Anführungszeichens durch ein einfaches hat das Problem behoben.


0

Wenn Sie springboot kürzlich auf 1.4.3 aktualisiert haben, müssen Sie möglicherweise Änderungen an der yml-Datei vornehmen:

yml in 1.3:

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

yml in 1.4.3:

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

-2

Wie bereits erwähnt, müssen Namen in Oracle SQL mindestens 30 Zeichen lang sein. Ich möchte hinzufügen, dass diese Regel nicht nur für Tabellennamen gilt, sondern auch für Feldnamen. Da haben Sie es also.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.