2

スキーマ内の多くのテーブルの列の名前から引用符を削除する必要があります。このプロセスを自動化する方法はありますか?、オラクルの関数、または引用符を削除して列の名前を変更できるツール。私はオラクル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 に答える