2009-12-12 3 views
2

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

UPDATE

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

благодарит заранее.

ответ

4

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

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 
+0

Это камни! Однако, поскольку мы не знали в нашей среде, кто еще мог написать запросы к таблицам в нашей схеме с использованием названий столбцов, мы ограничили наш внутренний запрос user_tab_cols, чтобы повлиять только на таблицы, которые, как мы знали, были безопасными для нас. В противном случае мы могли бы сломать чей-то код, так как их потенциальное использование имени котируемого столбца во встроенном SQL тогда не нашло бы имя столбца верблюжьего случая, которое у нас впоследствии было бы сверху. Спасибо тонну за это. – noogrub

6

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

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

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

Затем вы можете запустить операторов выбора, как это:

SELECT column1, column2 FROM FOO 

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

SELECT COLUMN1, COLUMN2 FROM FOO 

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

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'FOO' 

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

+0

просто проверить таблицы в базе данных, и проблема заключается в том, что были созданы с использованием цитат. – RRUZ

+0

Это неясно, но ... кто-то переносит таблицы Corel Paradox 9 на Oracle с помощью функции «copy()« Парадокс »для курсора« Парадокс », должен знать, что Paradox 9 действительно копирует таблицу в Oracle, используя по умолчанию имена столбцов столбцов. Наш массовый перенос старых таблиц в новую схему Oracle был бы в противном случае болезненным без тщательной очистки, которую дал г-н Джастин Кейв выше. – noogrub

Смежные вопросы