Mam zapytanie MySQL, aby pobrać kolumny z tabeli takiej jak ta:
String sqlStr="select column_name
from information_schema.COLUMNS
where table_name='users'
and table_schema='"+_db+"'
and column_name not in ('password','version','id')"
Jak zmienić powyższe zapytanie w bazie danych Oracle 11g? Muszę uzyskać nazwy kolumn jako zestaw wyników dla tabeli „użytkownicy” z wyłączeniem niektórych kolumn, określając schemat. W tej chwili wszystkie tabele znajdują się w moim nowym obszarze tabel, czy więc w miejsce nazwy schematu należy podać nazwę obszaru tabel?
Czy istnieje do tego ogólny HQL? W mojej nowej bazie danych Oracle (jestem nowy w Oracle) mam tylko nazwę obszaru tabel, więc czy jest to odpowiednik nazwy schematu (logicznie?)
and virtual_column = 'NO'
do mojego zapytania.Poniższe zapytanie zadziałało dla mnie w bazie danych Oracle.
źródło
...WHERE LOWER(Table_Name) = 'mytablename';
.where lower(TABLE_NAME) = lower('WHATEVER')
, gdy nazwa tabeli zawiera jakąś wielką literę, tabeli również nie znajdzieSELECT column_name FROM all_tab_cols WHERE UPPER(Table_Name) = UPPER('tablename');
działa równie dobrze.lower(TABLE_NAME)
lubupper(TABLE_NAME)
wymaga, aby Oracle wykonała skanowanieALL_TAB_COLUMNS
tabeli w celu uzyskania wszystkich wartości,TABLE_NAME
zanim będzie mogła porównać ją z podanąUPPER('MyTableName')
. W szybkich testach sprawiło to, że wydajność nie nadawała się do moich celów, więc będę trzymać się porównań z uwzględnieniem wielkości liter.w wyroczni, której możesz użyć
aby wyświetlić wszystkie kolumny zawierające w tabeli użytkowników
źródło
desc users
jest złą odpowiedzią na niektóre pytania, ale nie jest to dobra odpowiedź na to pytanie .Możesz spróbować tego: (Działa na 11g i zwraca wszystkie nazwy kolumn z tabeli, tutaj test_tbl to nazwa tabeli, a user_tab_columns to kolumny tabeli dozwolone przez użytkownika)
źródło
USER_TAB_COLUMNS
jest w rzeczywistości kolumnami tabel, których właścicielem jest użytkownik, a nie kolumnami tabel dozwolonych dla użytkownika.Zapytanie do użycia z Oracle to:
String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='"+_db+".users' and COLUMN_NAME not in ('password','version','id')"
Nigdy nie słyszałem o HQL dla takich zapytań. Zakładam, że nie ma sensu zajmować się tym implementacjami ORM. ORM to Object Relational Mapping, a to, czego szukasz, to mapowanie metadanych ... Nie używałbyś HQL, raczej używaj do tego celu metod API lub bezpośredniego SQL. Na przykład możesz użyć JDBC DatabaseMetaData .
Myślę, że przestrzeń tabel nie ma nic wspólnego ze schematem. Obszary tabel AFAIK są używane głównie do logicznych wewnętrznych celów technicznych, które powinny przeszkadzać administratorom baz danych. Więcej informacji na temat obszarów tabel można znaleźć w dokumencie Oracle .
źródło
TABLE_NAME='"+_db+".users'
zawiedzie; musisz oddzielić właściciela / schemat i nazwę tabeli wALL_TAB_COLUMNS
Jedynym sposobem, w jaki mogłem uzyskać nazwy kolumn, było użycie następującego zapytania:
źródło
chodzi o to, że w ropuchach musisz napisać nazwę tabeli wielką, w ten sposób:
źródło
Uważam, że ten jest przydatny w Oracle:
źródło
W kilku przypadkach potrzebowalibyśmy rozdzielonej przecinkami listy wszystkich kolumn z tabeli w schemacie. W takich przypadkach możemy użyć tej ogólnej funkcji, która pobiera listę oddzieloną przecinkami jako ciąg.
Zatem samo wywołanie funkcji z zapytania daje wiersz ze wszystkimi kolumnami.
Uwaga:
LISTAGG
zakończy się niepowodzeniem, jeśli łączna długość wszystkich kolumn przekracza liczbę4000
znaków, co jest rzadkie. W większości przypadków to zadziała.źródło
SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0;
-> Zwróć uwagę, że jest to Wynik zapytania, zestaw wyników. Można to wyeksportować do innych formatów. Możesz też wyeksportować wynik zapytania doText
formatu. Eksport wygląda jak poniżej, gdy zrobiłemSELECT * FROM SATURN.SPRIDEN WHERE ROWNUM = 0;
:"SPRTELE_PIDM" "SPRTELE_SEQNO" "SPRTELE_TELE_CODE" "SPRTELE_ACTIVITY_DATE" "SPRTELE_PHONE_AREA" "SPRTELE_PHONE_NUMBER" "SPRTELE_PHONE_EXT" "SPRTELE_STATUS_IND" "SPRTELE_ATYP_CODE" "SPRTELE_ADDR_SEQNO" "SPRTELE_PRIMARY_IND" "SPRTELE_UNLIST_IND" "SPRTELE_COMMENT" "SPRTELE_INTL_ACCESS" "SPRTELE_DATA_ORIGIN" "SPRTELE_USER_ID" „SPRTELE_CTRY_CODE_PHONE „SPRTELE_SURROGATE_ID” „SPRTELE_VERSION” „SPRTELE_VPDI_CODE”
DESCRIBE <TABLE_NAME>
-> Uwaga: to jest wyjście skryptu.źródło
Możesz użyć poniższego zapytania, aby uzyskać listę nazw tabel używających określonej kolumny w DB2:
Uwaga: w tym miejscu zastąp
COLUMN_NAME
nazwę kolumny, której szukasz.źródło
Możesz spróbować tego:
opisz „Nazwę tabeli”
Zwróci wszystkie nazwy kolumn i typy danych
źródło