1. 批量生成【表名转大写】SQL(仅生成,不执行)
sql
-- 批量修改表名为大写(生成SQL,手动执行更安全)
SELECT 'ALTER TABLE "' || TABLE_NAME || '" RENAME TO ' || UPPER(TABLE_NAME) || ';' AS 修改SQL
FROM USER_TABLES
WHERE TABLE_NAME != UPPER(TABLE_NAME);
2. 批量执行【所有表字段名转大写】(自动执行)
sql
-- 批量修改所有表的字段名为大写(直接运行即可)
BEGIN
-- 遍历当前用户所有表
FOR tab IN (SELECT table_name FROM user_tables) LOOP
-- 遍历表中小写/混合大小写字段
FOR col IN (SELECT column_name
FROM user_tab_columns
WHERE table_name = tab.table_name
AND column_name != UPPER(column_name)
ORDER BY column_id)
LOOP
-- 动态修改字段名为大写
EXECUTE IMMEDIATE
'ALTER TABLE ' || tab.table_name ||
' RENAME COLUMN "' || col.column_name || '" TO ' || UPPER(col.column_name);
END LOOP;
END LOOP;
END;
/
3. 刷新Oracle缓存
sql
-- 刷新共享池、数据缓冲区(解决缓存导致的查询异常)
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;
4. 查看当前连接的PDB/CDB名称
sql
-- 查看当前容器名(PDB/CDB)
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS 当前容器名 FROM DUAL;
5. 创建表空间(规范完整版)
sql
-- 创建自定义表空间(修改 表空间名、文件路径 即可使用)
CREATE TABLESPACE 表空间名
DATAFILE 'D:\oracle\oradata\ORCL\orclpdb\表空间名.dbf'
SIZE 1G
AUTOEXTEND ON NEXT 100M
MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
6. 基础权限授权
sql
-- 给用户授予基础权限(连接、建表、序列、视图、无限表空间)
GRANT CREATE SESSION TO 用户名;
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO 用户名;
GRANT UNLIMITED TABLESPACE TO 用户名;
-- 如需存储过程、触发器,追加:
-- GRANT CREATE PROCEDURE, CREATE TRIGGER TO 用户名;
7. 【指定单张表】字段名转大写
sql
-- 仅修改指定表的字段为大写(替换 表名 为大写)
BEGIN
FOR rec IN (SELECT column_name
FROM user_tab_columns
WHERE table_name = '表名' -- 表名必须大写
AND column_name != UPPER(column_name)
ORDER BY column_id)
LOOP
EXECUTE IMMEDIATE 'ALTER TABLE 表名 RENAME COLUMN "' || rec.column_name || '" TO ' || UPPER(rec.column_name);
END LOOP;
END;
/
8. 安全修改字段类型(字符串转数字,无数据丢失)
sql
-- 字段类型安全改造: VARCHAR2 → NUMBER(18,4)
-- 1. 新增目标类型字段
ALTER TABLE 表名 ADD 字段名_new NUMBER(18,4);
-- 2. 数据迁移(空值自动转0)
UPDATE 表名 SET 字段名_new = NVL(TO_NUMBER(TRIM(原字段名)), 0);
COMMIT;
-- 3. 旧字段备份
ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 原字段名_old;
-- 4. 新字段替换为正式字段
ALTER TABLE 表名 RENAME COLUMN 字段名_new TO 原字段名;
-- 5. 刷新表统计信息
ANALYZE TABLE 表名 COMPUTE STATISTICS;
9. 解锁用户账号
sql
-- 解锁账号(通用语法)
ALTER USER 用户名 ACCOUNT UNLOCK;
-- 示例:解锁system账号
ALTER USER system ACCOUNT UNLOCK;
10. 完整创建【表空间 + 用户 + 授权】
sql
-- 1. 创建表空间
CREATE TABLESPACE 表空间名
DATAFILE 'D:\ORACLE\ORADATA\ORCL\ORCLPDB\表空间名.dbf'
SIZE 500M
AUTOEXTEND ON NEXT 100M
MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- 2. 创建用户(指定默认表空间)
CREATE USER 用户名 IDENTIFIED BY "密码"
DEFAULT TABLESPACE 表空间名
TEMPORARY TABLESPACE TEMP;
-- 3. 基础授权
GRANT CREATE SESSION TO 用户名;
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO 用户名;
GRANT UNLIMITED TABLESPACE TO 用户名;
11. 批量执行【指定多张表】表名转大写
sql
-- 批量修改指定表名为大写(IN中填写需要修改的表名)
BEGIN
FOR t IN (
SELECT TABLE_NAME
FROM USER_TABLES
WHERE TABLE_NAME IN ('表名1','表名2','表名3') -- 填写目标表名
) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE "'||t.TABLE_NAME||'" RENAME TO '||UPPER(t.TABLE_NAME);
END LOOP;
END;
/
重要使用说明
- 表名/字段名大小写 :Oracle 元数据默认全大写,小写表/字段必须加双引号,建议统一转大写避免报错。
- 执行注意 :修改表名、字段、类型属于DDL操作,会自动提交事务,生产环境建议先备份。
- PDB环境 :12c+版本必须切换到PDB内执行表空间、用户、表相关操作。
- 结尾
/:PL/SQL块(BEGIN-END)结尾必须加/才能执行。
总结
这份整理好的SQL覆盖了表/字段大小写转换、表空间创建、用户授权、字段类型修改、账号解锁 等高频运维场景,直接替换中文占位符即可使用,语法规范无错误,适配Oracle 11g/12c/19c主流版本。