2016-11-28 5 views
0

Я хотел бы создать функцию, которая заглавными именами всех столбцов в oracle db. Я не использую оракул каждый день, поэтому мне нужна помощь.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

Oracle, как функциональность по умолчанию, будет тайным все некотируемые идентификаторы таблиц/столбцов в верхний регистр - так что вам не нужен используйте функцию UPPER; просто оставьте идентификаторы без кавычек.

Чтобы найти данные, вы требуете вы хотите ALL_TAB_COLUMNS или USER_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; 
/
Смежные вопросы