Sql 在ORACLE 11g中规范化列名称
我需要删除模式中许多表中列名称的引号。有什么方法可以使这个过程自动化?、oracle中的任何函数或某种允许我更改删除引号的列名称的工具。我正在使用Oracle11g 更新 对不起,我不得不重新措辞我的问题 提前谢谢。我想这里的“字段”是指“列名” 请记住,Oracle中的列名不区分大小写,除非在创建表时将它们放在引号中。创建表时,在列名周围使用引号通常不是一个好主意。换句话说,如果您创建如下表:Sql 在ORACLE 11g中规范化列名称,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我需要删除模式中许多表中列名称的引号。有什么方法可以使这个过程自动化?、oracle中的任何函数或某种允许我更改删除引号的列名称的工具。我正在使用Oracle11g 更新 对不起,我不得不重新措辞我的问题 提前谢谢。我想这里的“字段”是指“列名” 请记住,Oracle中的列名不区分大小写,除非在创建表时将它们放在引号中。创建表时,在列名周围使用引号通常不是一个好主意。换句话说,如果您创建如下表: CREATE TABLE FOO ( colUMN1 varchar2(10), CoLum
CREATE TABLE FOO (
colUMN1 varchar2(10),
CoLumn2 number(38)
)
SELECT column1, column2 FROM FOO
然后,您仍然可以像这样运行select语句:
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'
因此,没有必要将这些列重命名为全大写。您编写的查询可以使用所有大写的列名(假设表不是使用列名周围的引号创建的),它们可以正常工作。如果您只想删除所有区分大小写的列名,那么尝试强制它们区分大小写通常是一个坏主意。
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
只需检查数据库中的表,问题是这些表是使用引号创建的。这是不清楚的,但是。。。任何使用Paradox TCursor“copy()”函数将Corel Paradox 9表转移到Oracle的人都应该知道,默认情况下,Paradox 9确实使用带引号的列名将表复制到Oracle。如果没有上面Justin Cave先生所做的彻底清理,我们将旧表大量转移到新的Oracle模式将非常痛苦!但是,由于我们不知道在我们的环境中还有谁可能使用带引号的列名对模式中的表编写了查询,因此我们将内部用户\u tab\u cols查询限制为只影响我们知道可以安全修改的表。否则,我们可能会破坏其他人的代码,因为他们可能在嵌入式SQL中使用带引号的列名,而不会找到我们随后使用大写的驼峰式列名。非常感谢。