2016-11-28 7 views
0

oracle dbのすべての列名を大文字にする関数を作成したいと考えています。 私は毎日オラクルを使用しないので、私は助けが必要です。オラクルの大文字列の名前

私はこれをしたいと思いますが、Oracleのために:

CREATE OR REPLACE FUNCTION uppercase_fields(schemaname text) RETURNS void AS $$ 
DECLARE 
    r RECORD; 
    full_table text; 
    geom_type_count integer; 
BEGIN 
    FOR r IN 
    EXECUTE 'SELECT table_name, table_schema, column_name FROM information_schema.columns WHERE table_schema = $1 AND column_name <> upper(column_name)' 
     USING schemaname 
    LOOP 
    EXECUTE 'ALTER TABLE "' || r.table_schema || '"."' || r.table_name || '" RENAME "' || r.column_name || '" to "' || upper(r.column_name) || '"'; 
    END LOOP; 
END; 
$$ LANGUAGE plpgsql; 

おかげ

+2

必要がありません:

はあなたがデータ・ディクショナリからALL_TAB_COLUMNSまたはUSER_TAB_COLUMNSテーブルが欲しい必要なデータを検索するには。オラクルはすでに大文字と小文字を大文字に変換するためにUPPERという名前の組み込み関数を備えています – XING

答えて

2

Oracleは、デフォルト機能として、大文字にすべての引用符で囲まれていないテーブル/列識別子をひそかます - ので、あなたがする必要はありませんUPPER関数を使用します。識別子を引用符で囲まないでください。任意の関数のための

BEGIN 
    FOR r IN (SELECT owner, table_name, column_name 
      FROM ALL_TAB_COLUMNS 
      WHERE owner IN ('your', 'list' , 'of', 'tablespaces') 
      AND column_name <> UPPER(column_name) 
      ) 
    LOOP 
    EXECUTE 'ALTER TABLE "' || r.owner || '"."' || r.table_name 
      || '" RENAME COLUMN "' || r.column_name || '" TO ' || r.column_name; 
    END LOOP; 
END; 
/
関連する問題