Oracle如何将列名大写

Oracle how to uppercase columns name

我想在 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 =  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;

谢谢

Oracle 作为默认功能,会将所有未加引号的 table/column 标识符转换为大写 - 因此您无需使用 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;
/

如果您的列名是保留字或不能在不带引号的标识符中,那么您可以使用:

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 "' || UPPER(r.column_name) || '"';
  END LOOP;
END;
/

要将 Oracle 中的所有列名称更改为大写,请使用此解决方案:

DECLARE
  TARGET_TABLE_NAME VARCHAR2(31) := 'ENTER_YOUR_TARGET_TABLE_NAME_HERE';
BEGIN
    FOR I IN (
            SELECT
                    COLUMN_NAME
            FROM
                    ALL_TAB_COLUMNS
            WHERE
                    TABLE_NAME = TARGET_TABLE_NAME
            AND
                    COLUMN_NAME <> UPPER(COLUMN_NAME)
        )
    LOOP
        EXECUTE IMMEDIATE 'ALTER  TABLE ' ||
                                TARGET_TABLE_NAME ||
                          ' RENAME COLUMN "' ||
                                I.COLUMN_NAME ||
                          '" TO ' ||
                                UPPER(I.COLUMN_NAME);
    END LOOP;
END;
/

只需将目标 table 的名称替换为 ENTER_YOUR_TARGET_TABLE_NAME_HERE