Нормализация имен столбцов в ORACLE 11g

Мне нужно удалить кавычки из имен столбцов во многих таблицах моей схемы. есть ли способ автоматизировать этот процесс? Любая функция в оракуле или какой-либо инструмент, который позволяет мне изменять имена столбцов, удаляя кавычки. Я использую оракул 11g.

ОБНОВЛЕНИЕ

Извините, мне пришлось перефразировать свой вопрос.

заранее спасибо.


person RRUZ    schedule 12.12.2009    source источник


Ответы (2)


Если вы просто хотите избавиться от всех имен столбцов, чувствительных к регистру

SQL> create table foo ( "x" number );

Table created.

SQL> ed
Wrote file afiedt.buf

  1  begin
  2    for x in (select *
  3                from user_tab_cols
  4               where column_name != UPPER(column_name))
  5    loop
  6      execute immediate 'ALTER TABLE ' || x.table_name ||
  7        ' RENAME column "' || x.column_name || '"' ||
  8        ' TO ' || upper(x.column_name);
  9    end loop;
 10* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> desc foo
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 X                                                  NUMBER
person Justin Cave    schedule 12.12.2009
comment
Это качает! Однако, поскольку в нашей среде мы не знали, кто еще может написать запросы к таблицам в нашей схеме, используя имена столбцов в кавычках, мы ограничили наш внутренний запрос user_tab_cols только теми таблицами, которые, как мы знали, можно было безопасно изменять. В противном случае мы могли бы сломать чужой код, поскольку их потенциальное использование имени столбца в кавычках во встроенном SQL не нашло бы имя столбца в верблюжьем регистре, которое мы впоследствии использовали в верхнем регистре. Большое спасибо за это. - person noogrub; 27.09.2016

Я предполагаю, что здесь под «полями» вы подразумеваете «имена столбцов».

Имейте в виду, что имена столбцов в Oracle не чувствительны к регистру, если вы не заключаете их в кавычки при создании таблицы. Как правило, при создании таблицы не рекомендуется заключать имена столбцов в кавычки. Другими словами, если вы создадите таблицу следующим образом:

CREATE TABLE FOO (
  colUMN1 varchar2(10),
  CoLumn2 number(38)
)

Затем вы все равно можете запускать операторы select следующим образом:

SELECT column1, column2 FROM FOO

Вы также можете сделать это:

SELECT COLUMN1, COLUMN2 FROM FOO

Также обратите внимание, что если вы запустите этот запрос, вы увидите, что Oracle сохранил имена столбцов в словаре данных в верхнем регистре:

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'FOO'

Поэтому нет необходимости переименовывать эти столбцы в верхний регистр. Запросы, которые вы пишете, могут использовать все имена столбцов в верхнем регистре (при условии, что таблицы не были созданы с использованием кавычек вокруг имен столбцов), и они будут работать нормально. Как правило, это плохая идея - пытаться заставить их быть чувствительными к регистру.

person dcp    schedule 12.12.2009
comment
просто проверьте таблицы в базе данных, и проблема в том, что они были созданы с использованием кавычек. - person RRUZ; 12.12.2009
comment
Это неясно, но... любой, кто переносит таблицы Corel Paradox 9 в Oracle с помощью функции Paradox TCursor copy(), должен знать, что Paradox 9 действительно копирует таблицу в Oracle, используя по умолчанию имена столбцов в кавычках. В противном случае наш массовый перенос старых таблиц в новую схему Oracle был бы болезненным без радикальной очистки, описанной г-ном Джастином Кейвом выше. - person noogrub; 27.09.2016