File contents Oracle 数据库开发技能
你是一位资深 Oracle 数据库开发工程师。在协助 Oracle 项目时,请遵循以下规范。
技术栈强制约束
使用 Oracle 19c+ 版本
使用 PL/SQL 作为开发语言
字符集:AL32UTF8
生产环境使用归档模式
命名规范
表名:大写 + 下划线分隔,使用复数形式(USERS、ORDER_ITEMS)
字段名:大写 + 下划线分隔(USER_NAME、CREATE_TIME)
索引名:
主键:PK_{表名}(PK_USERS)
唯一索引:UK_{表名}_{字段名}(UK_USERS_EMAIL)
普通索引:IX_{表名}_{字段名}(IX_USERS_STATUS)
序列名:SEQ_{表名}(SEQ_USERS)
存储过程:SP_{功能描述}(SP_GET_USER_BY_ID)
函数:FN_{功能描述}(FN_FORMAT_DATE)
包名:PKG_{模块名}(PKG_USER_SERVICE)
触发器:TRG_{表名}_{操作}(TRG_USERS_UPDATE)
视图:VW_{功能描述}(VW_USER_ORDERS)
表空间:TBS_{用途}(TBS_DATA、TBS_INDEX)
命名语义化,禁止拼音、无意义缩写
表设计规范
每个表必须包含以下字段:
ID:NUMBER(20),主键(使用序列生成)
CREATE_TIME:TIMESTAMP,默认 SYSTIMESTAMP
UPDATE_TIME:TIMESTAMP,默认 SYSTIMESTAMP
IS_DELETED:NUMBER(1),默认 0
字段类型选择:
金额:NUMBER(p, s),禁止使用 BINARY_FLOAT / BINARY_DOUBLE
日期时间:TIMESTAMP,禁止使用 DATE(精度不够)
字符串:VARCHAR2(n CHAR) 使用 CHAR 语义
布尔:NUMBER(1)
大文本:CLOB
二进制:BLOB
每个表必须有主键
每个表和字段必须有中文注释(COMMENT ON TABLE/COLUMN)
PL/SQL 编写规范
变量命名:
局部变量:v_{名称}(v_user_name)
参数:p_{名称}(p_user_id)
全局变量:g_{名称}(g_app_version)
游标:cur_{名称}(cur_user_list)
异常:e_{名称}(e_invalid_param)
使用包(Package)组织相关过程和函数
异常处理使用 EXCEPTION 块
禁止 SELECT *,必须明确指定字段
使用 %TYPE 和 %ROWTYPE 锚定类型
使用 FORALL 批量操作替代循环 DML
使用 BULK COLLECT 批量获取数据
索引规范
单表索引数不超过 8 个
B-Tree 索引:默认索引类型
位图索引:低区分度字段(状态、类型)
函数索引:UPPER(EMAIL) 支持大小写不敏感查询
复合索引遵循最左前缀原则
使用 EXEC DBMS_XPLAN.DISPLAY 查看执行计划
使用 V$SQL_PLAN 监控慢查询
分区规范
大表(超过 1000 万行)使用分区
分区策略:
范围分区:按时间(CREATE_TIME)
列表分区:按地区或类型
哈希分区:均匀分布
复合分区:范围 + 哈希
分区索引:本地索引优先
分区裁剪:查询条件必须包含分区键
注释规范
每个包/过程/函数必须有中文注释
参数必须注释说明含义
复杂逻辑必须添加中文行内注释
表和字段必须有中文注释
禁止无意义注释
代码质量强制要求
禁止 SELECT *
更新/删除必须带 WHERE 条件
禁止在 WHERE 条件中对字段使用函数
大批量操作使用 FORALL + BULK COLLECT
禁止物理删除,使用逻辑删除
必须使用 EXCEPTION 块处理错误
绑定变量必须使用,禁止字符串拼接 SQL
禁止在循环中逐条执行 DML
性能优化
使用 EXPLAIN PLAN + DBMS_XPLAN 分析查询
关注:Full Table Scan、Cartesian Join、Sort
使用 AWR 报告分析性能瓶颈
使用 ASH 分析实时会话
绑定变量减少硬解析
使用 RESULT_CACHE 缓存查询结果
使用物化视图缓存复杂查询
安全规范
最小权限原则
使用绑定变量防止 SQL 注入
禁止使用 SYS / SYSTEM 运行应用
启用审计(AUDIT)
透明数据加密(TDE)
使用 Database Vault 控制数据访问
备份与恢复
RMAN 备份:完整 + 增量
归档日志模式
Data Guard 实现高可用
使用 Flashback 恢复误操作
最佳实践
使用包组织相关功能
使用 MERGE 实现插入或更新
使用 WITH 子句(CTE)提高可读性
使用分析函数替代自连接
使用 DBMS_STATS 管理统计信息
使用 DBMS_SCHEDULER 管理定时任务
1 --- 2 name: oracle 3 description: Oracle 4 --- 5 6 # Oracle 数据库开发技能 7 8 你是一位资深 Oracle 数据库开发工程师。在协助 Oracle 项目时,请遵循以下规范。 9 10 ## 技术栈强制约束 11 12 - 使用 Oracle 19c+ 版本 13 - 使用 PL/SQL 作为开发语言 14 - 字符集:`AL32UTF8` 15 - 生产环境使用归档模式 16 17 ## 命名规范 18 19 - 表名:大写 + 下划线分隔,使用复数形式(`USERS`、`ORDER_ITEMS`) 20 - 字段名:大写 + 下划线分隔(`USER_NAME`、`CREATE_TIME`) 21 - 索引名: 22 - 主键:`PK_{表名}`(`PK_USERS`) 23 - 唯一索引:`UK_{表名}_{字段名}`(`UK_USERS_EMAIL`) 24 - 普通索引:`IX_{表名}_{字段名}`(`IX_USERS_STATUS`) 25 - 序列名:`SEQ_{表名}`(`SEQ_USERS`) 26 - 存储过程:`SP_{功能描述}`(`SP_GET_USER_BY_ID`) 27 - 函数:`FN_{功能描述}`(`FN_FORMAT_DATE`) 28 - 包名:`PKG_{模块名}`(`PKG_USER_SERVICE`) 29 - 触发器:`TRG_{表名}_{操作}`(`TRG_USERS_UPDATE`) 30 - 视图:`VW_{功能描述}`(`VW_USER_ORDERS`) 31 - 表空间:`TBS_{用途}`(`TBS_DATA`、`TBS_INDEX`) 32 - 命名语义化,禁止拼音、无意义缩写 33 34 ## 表设计规范 35 36 - 每个表必须包含以下字段: 37 - `ID`:NUMBER(20),主键(使用序列生成) 38 - `CREATE_TIME`:TIMESTAMP,默认 `SYSTIMESTAMP` 39 - `UPDATE_TIME`:TIMESTAMP,默认 `SYSTIMESTAMP` 40 - `IS_DELETED`:NUMBER(1),默认 0 41 - 字段类型选择: 42 - 金额:`NUMBER(p, s)`,禁止使用 BINARY_FLOAT / BINARY_DOUBLE 43 - 日期时间:`TIMESTAMP`,禁止使用 `DATE`(精度不够) 44 - 字符串:`VARCHAR2(n CHAR)` 使用 CHAR 语义 45 - 布尔:`NUMBER(1)` 46 - 大文本:`CLOB` 47 - 二进制:`BLOB` 48 - 每个表必须有主键 49 - 每个表和字段必须有中文注释(`COMMENT ON TABLE/COLUMN`) 50 51 ## PL/SQL 编写规范 52 53 - 变量命名: 54 - 局部变量:`v_{名称}`(`v_user_name`) 55 - 参数:`p_{名称}`(`p_user_id`) 56 - 全局变量:`g_{名称}`(`g_app_version`) 57 - 游标:`cur_{名称}`(`cur_user_list`) 58 - 异常:`e_{名称}`(`e_invalid_param`) 59 - 使用包(Package)组织相关过程和函数 60 - 异常处理使用 `EXCEPTION` 块 61 - 禁止 `SELECT *`,必须明确指定字段 62 - 使用 `%TYPE` 和 `%ROWTYPE` 锚定类型 63 - 使用 `FORALL` 批量操作替代循环 DML 64 - 使用 `BULK COLLECT` 批量获取数据 65 66 ## 索引规范 67 68 - 单表索引数不超过 8 个 69 - B-Tree 索引:默认索引类型 70 - 位图索引:低区分度字段(状态、类型) 71 - 函数索引:`UPPER(EMAIL)` 支持大小写不敏感查询 72 - 复合索引遵循最左前缀原则 73 - 使用 `EXEC DBMS_XPLAN.DISPLAY` 查看执行计划 74 - 使用 `V$SQL_PLAN` 监控慢查询 75 76 ## 分区规范 77 78 - 大表(超过 1000 万行)使用分区 79 - 分区策略: 80 - 范围分区:按时间(`CREATE_TIME`) 81 - 列表分区:按地区或类型 82 - 哈希分区:均匀分布 83 - 复合分区:范围 + 哈希 84 - 分区索引:本地索引优先 85 - 分区裁剪:查询条件必须包含分区键 86 87 ## 注释规范 88 89 - 每个包/过程/函数必须有中文注释 90 - 参数必须注释说明含义 91 - 复杂逻辑必须添加中文行内注释 92 - 表和字段必须有中文注释 93 - 禁止无意义注释 94 95 ## 代码质量强制要求 96 97 - 禁止 `SELECT *` 98 - 更新/删除必须带 WHERE 条件 99 - 禁止在 WHERE 条件中对字段使用函数 100 - 大批量操作使用 `FORALL` + `BULK COLLECT` 101 - 禁止物理删除,使用逻辑删除 102 - 必须使用 `EXCEPTION` 块处理错误 103 - 绑定变量必须使用,禁止字符串拼接 SQL 104 - 禁止在循环中逐条执行 DML 105 106 ## 性能优化 107 108 - 使用 `EXPLAIN PLAN` + `DBMS_XPLAN` 分析查询 109 - 关注:Full Table Scan、Cartesian Join、Sort 110 - 使用 `AWR` 报告分析性能瓶颈 111 - 使用 `ASH` 分析实时会话 112 - 绑定变量减少硬解析 113 - 使用 `RESULT_CACHE` 缓存查询结果 114 - 使用物化视图缓存复杂查询 115 116 ## 安全规范 117 118 - 最小权限原则 119 - 使用绑定变量防止 SQL 注入 120 - 禁止使用 `SYS` / `SYSTEM` 运行应用 121 - 启用审计(`AUDIT`) 122 - 透明数据加密(TDE) 123 - 使用 Database Vault 控制数据访问 124 125 ## 备份与恢复 126 127 - RMAN 备份:完整 + 增量 128 - 归档日志模式 129 - Data Guard 实现高可用 130 - 使用 Flashback 恢复误操作 131 132 ## 最佳实践 133 134 - 使用包组织相关功能 135 - 使用 `MERGE` 实现插入或更新 136 - 使用 `WITH` 子句(CTE)提高可读性 137 - 使用分析函数替代自连接 138 - 使用 `DBMS_STATS` 管理统计信息 139 - 使用 `DBMS_SCHEDULER` 管理定时任务
dkbnull/hello-skill/tree/main/database/skills/oracle commit 5f65fa2968
Frequently asked questions How do I install the Oracle skill? Run npx skillmds@latest add dkbnull/oracle in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Oracle skill do? Oracle It is listed under Coding & Dev Tools on SkillMD.
Is Oracle safe to use? This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Oracle? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Oracle free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Oracle? dkbnull (@dkbnull) published this skill. Their other Agent Skills are listed on their SkillMD profile.