mam zapytanie typu:
SELECT column as averyveryveryverylongalias (more than 30 characters)
FROM Table_name
zwraca błąd Identyfikator ORA-00972 jest zbyt długi , czy jest jakaś wskazówka, aby działał bez skracania aliasu?
Dzięki
Odpowiedzi:
Nie, przed wersją Oracle 12.2 identyfikatory nie mogą przekraczać 30 znaków. Zobacz dokumentację języka Oracle SQL .
Jednak od wersji 12.2 mogą mieć długość do 128 bajtów. (Uwaga: bajty, nie znaki).
Błąd jest również spowodowany dziwaczną obsługą cudzysłowów i pojedynczych qutoes. Aby uwzględnić w zapytaniu pojedyncze cudzysłowy , użyj podwójnych apostrofów.
To nie zadziała
select dbms_xmlgen.getxml("Select ....") XML from dual;
albo to albo
select dbms_xmlgen.getxml('Select .. where something='red'..') XML from dual;
ale to działa
select dbms_xmlgen.getxml('Select .. where something=''red''..') XML from dual;
Obiekt, w którym Oracle przechowuje nazwę identyfikatorów (np. Nazwy tabel użytkownika są przechowywane w tabeli o nazwie USER_TABLES, a nazwy kolumn użytkownika są przechowywane w tabeli o nazwie USER_TAB_COLUMNS), mają kolumny NAME (np. TABLE_NAME w USER_TABLES) o rozmiarze Varchar2 (30) ... i jest jednolity we wszystkich tabelach systemowych obiektów lub identyfikatorów -
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
Jeśli niedawno zaktualizowałeś springboot do 1.4.3, może być konieczne wprowadzenie zmian w pliku yml:
yml w wersji 1.3:
jpa:
hibernate:
namingStrategy: org.hibernate.cfg.EJB3NamingStrategy
yml w wersji 1.4.3:
jpa:
hibernate:
naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Jak wspominali inni, nazwy w Oracle SQL muszą mieć 30 znaków lub mniej. Dodam, że ta reguła dotyczy nie tylko nazw tabel, ale także nazw pól. Więc masz to.