2010-06-21 6 views
52

ich habe eine Abfrage wie:ORA-00972 Bezeichner ist zu lang alias Spaltenname

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

es gibt den Fehler ORA-00972 Kennung zu lang ist, gibt es eine Spitze, damit es funktioniert ohne den Alias ​​kürzer zu machen?

Dank

Antwort

72

Nein, vor der Oracle-Version 12.2 sind Kennungen nicht mehr als 30 Zeichen lang überschreiten. Siehe the Oracle SQL Language Reference.

Allerdings from version 12.2 they can be up to 128 bytes long. (Hinweis: Bytes, keine Zeichen).

+15

aus Neugier, weiß jemand, wo diese Einschränkung kommt, und wie kommt es, dass das Limit nie gelockert wurde? Es fällt mir wirklich auf, dass keiner der Millionen von zahlenden Kunden von Oracle * jemals eine solche Funktion angefordert hat (jetzt versteht mich nicht falsch, ich bin mir ziemlich sicher, dass es einen tiefen technischen Grund gibt, aber immer noch ..) – phtrivier

+9

Okay, Ich hätte SO fragen können: http://stackoverflow.com/questions/1378133/why-are-oracle-table-column-index-names-limited-to-30-characters – phtrivier

+0

Ich bin auch auf diese Situation gestoßen. Ich habe eine Tabellenspalte mit Namenslänge = 32. Aber warum in aller Welt ist ein Tabellenspaltenname erlaubt mehr als 30 Zeichen, während gleichzeitig eine Kennung ist nicht? Diese Grenzen sollten Hand in Hand gehen, oder?Wie kann diese Situation überhaupt entstehen? – Vering

4

Das Objekt, in dem Oracle den Namen der Bezeichner speichert (zB die Tabellennamen des Benutzers sind in der Tabelle USER_TABLES gespeichert und die Spaltennamen des Benutzers sind in der Tabelle USER_TAB_COLUMNS gespeichert), hat den NAME Spalten (zB TABLE_NAME in USER_TABLES) der Größe Varchar2 (30) ... und es ist einheitlich durch alle Systemtabellen von Objekten oder Identifikatoren -

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 
3

ich bin mit Argos Reporting-System als Front-End und Oracle in zurück. Ich bin gerade auf diesen Fehler gestoßen und er wurde durch einen String mit einem doppelten Anführungszeichen am Anfang und einem einfachen Anführungszeichen am Ende verursacht. Durch das Ersetzen des doppelten Anführungszeichens durch ein einzelnes Problem wurde das Problem gelöst.

10

Der Fehler wird auch durch eigenartige Behandlung von Anführungszeichen und einzelnen Qutoes verursacht. Um einfache Anführungszeichen in die Abfrage einzuschließen, verwenden Sie double einfache Anführungszeichen.

wird dies nicht funktionieren

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

oder diese entweder

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

aber

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

Das Markup änderte mein Beispiel, es sollte etwas sein, das gleich ist single quote single quote red single quote single quote –

-1

funktioniert Wie andere genannt haben, Namen in Oracle SQL weniger sein muss, oder gleich 30 Zeichen. Ich würde hinzufügen, dass diese Regel nicht nur für Tabellennamen gilt, sondern auch für Feldnamen. So, da hast du es.

0

Wenn Sie vor kurzem springboot auf 1.4.3 aktualisiert haben, müssen Sie möglicherweise Änderungen an yml Datei machen:

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