У меня есть запрос mySQL для получения столбцов из такой таблицы:
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')"
Как изменить указанный выше запрос в базе данных Oracle 11g? Мне нужно получить имена столбцов в качестве набора результатов для таблицы «пользователи», исключая определенные столбцы, указав схему. Прямо сейчас у меня есть все таблицы в моем новом табличном пространстве, поэтому могу ли я указать имя табличного пространства вместо имени схемы?
Есть ли для этого общий HQL? В моей новой базе данных Oracle (я новичок в Oracle) у меня есть только имя табличного пространства, так что это эквивалентно имени схемы (логически?)
and virtual_column = 'NO'
к моему запросу.Приведенный ниже запрос работал у меня в базе данных Oracle.
источник
...WHERE LOWER(Table_Name) = 'mytablename';
.where lower(TABLE_NAME) = lower('WHATEVER')
, иначе, когда в имени таблицы есть какой-то заглавный символ, он тоже не найдет таблицуSELECT column_name FROM all_tab_cols WHERE UPPER(Table_Name) = UPPER('tablename');
работает так же хорошо.lower(TABLE_NAME)
илиupper(TABLE_NAME)
требует, чтобы oracle сканировалALL_TAB_COLUMNS
таблицу, чтобы получить все значения,TABLE_NAME
прежде чем он сможет сравнить их с предоставленнымиUPPER('MyTableName')
. При быстром тестировании это сделало производительность непригодной для моей цели, поэтому я буду придерживаться сравнения с учетом регистра.в оракуле вы можете использовать
для отображения всех столбцов, содержащихся в таблице пользователей
источник
desc users
плохой ответ на некоторые вопросы, но не лучший ответ на этот .Вы можете попробовать это: (Он работает на 11g и возвращает все имена столбцов из таблицы, здесь test_tbl - это имя таблицы, а user_tab_columns - разрешенные пользователем столбцы таблицы)
источник
USER_TAB_COLUMNS
на самом деле столбцы таблиц, принадлежащих пользователю, а не столбцы таблиц, разрешенных пользователю.Запрос для использования с Oracle:
String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='"+_db+".users' and COLUMN_NAME not in ('password','version','id')"
Никогда не слышал о HQL для таких запросов. Я полагаю, что реализациям ORM не имеет смысла справляться с этим. ORM - это объектно-реляционное сопоставление, и вы ищете сопоставление метаданных ... Вы бы не использовали HQL, а использовали бы методы API для этой цели или прямой SQL. Например, вы можете использовать JDBC DatabaseMetaData .
Я думаю, что табличное пространство не имеет ничего общего со схемой. Табличные пространства AFAIK в основном используются для логических внутренних технических целей, которые должны беспокоить администраторов баз данных. Дополнительные сведения о табличных пространствах см. В документации Oracle .
источник
TABLE_NAME='"+_db+".users'
не удастся; вам нужно разделить владельца / схему и имя таблицыALL_TAB_COLUMNS
Единственный способ получить имена столбцов - использовать следующий запрос:
источник
Дело в том, что в жабе вам нужно написать заглавную букву имени таблицы, например:
источник
Я считаю это полезным в Oracle:
источник
В некоторых случаях нам понадобится список всех столбцов из таблицы в схеме, разделенный запятыми. В таких случаях мы можем использовать эту универсальную функцию, которая извлекает список, разделенный запятыми, в виде строки.
Итак, простой вызов функции из запроса дает строку со всеми столбцами.
Примечание:
LISTAGG
завершится ошибкой, если общая длина всех столбцов превышает количество4000
символов, что бывает редко. В большинстве случаев это сработает.источник
SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0;
-> Обратите внимание, что это результат запроса, ResultSet. Это можно экспортировать в другие форматы. И вы можете экспортировать результат запроса вText
формат. Когда я это сделал, экспорт выглядит такSELECT * 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>
-> Примечание: это вывод скрипта.источник
Вы можете использовать приведенный ниже запрос, чтобы получить список имен таблиц, в которых используется конкретный столбец в DB2:
Примечание: замените
COLUMN_NAME
здесь имя столбца, который вы ищете.источник
Вы можете попробовать это:
описать "Имя таблицы"
Он вернет все имена столбцов и типы данных
источник