2

我需要从架构中许多表中的列名称中删除引号。有什么方法可以自动化这个过程吗?oracle 中的任何函数或一些允许我更改删除引号的列的名称的工具。我正在使用 oracle 11g。

更新

对不起,我不得不重新提出我的问题。

提前致谢。

4

2 回答 2

6

我在这里假设“字段”是指“列名”。

请记住,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'

因此,无需将这些列重命名为全部大写。您编写的查询可以使用所有大写的列名(假设表不是在列名周围使用引号创建的)并且它们可以正常工作。试图强迫它们区分大小写通常是一个坏主意。

于 2009-12-12T04:15:29.053 回答
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
于 2009-12-12T07:14:39.810 回答