linux 上mysql区分大小写,mysql 数据同步到oracle之后也区分大小写(oracle默认自动转大写),现于oracle数据库中,把用户下所有表调成大写
bash
BEGIN
FOR c IN (SELECT table_name tn FROM user_tables WHERE table_name <> UPPER(table_name))
LOOP
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "' || c.tn || '" RENAME TO ' || UPPER(c.tn);
DBMS_OUTPUT.PUT_LINE('表 "' || c.tn || '" 已重命名为 ' || UPPER(c.tn));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('表 ' || c.tn || ' 重命名失败: ' || SQLERRM);
END;
END LOOP;
END;
/
bash
-- 设置更大的缓冲区(1MB)
SET SERVEROUTPUT ON SIZE 1000000;
BEGIN
FOR t IN (SELECT table_name tn FROM user_tables)
LOOP
FOR c IN (SELECT column_name cn FROM user_tab_columns
WHERE table_name = t.tn AND column_name <> UPPER(column_name))
LOOP
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "' || t.tn || '" RENAME COLUMN "' || c.cn || '" TO ' || UPPER(c.cn);
-- 每成功10条输出一次,减少缓冲区压力
-- 如果需要静默执行,可以直接注释掉DBMS_OUTPUT
-- DBMS_OUTPUT.PUT_LINE('成功: ' || t.tn || '.' || c.cn || ' -> ' || UPPER(c.cn));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('失败: ' || t.tn || '.' || c.cn || ' - ' || SQLERRM);
END;
END LOOP;
END LOOP;
DBMS_OUTPUT.PUT_LINE('执行完成!');
END;
/