2016-11-28 71 views
0

我想在oracle db中創建一個大寫的所有列名稱的函數。 我每天都不使用oracle,所以我需要幫助。Oracle如何以大寫的列名稱

我想這一點,但對於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

無需任何功能。 Oracle已經有一個名爲UPPER的內置函數來將小寫字母轉換爲大寫字母 – XING

回答

2

甲骨文,作爲默認功能,將隱蔽的所有不帶引號的表/列的標識符爲大寫 - 所以你不需要使用UPPER函數;只保留標識符不加引號。

要找到你需要你想從數據字典中的ALL_TAB_COLUMNSUSER_TAB_COLUMNS表中的數據:

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; 
/
相關問題