ORACLE数据库命名编码规?br />版本记录Q?br />当前版本Q?br />?者: 完成日期Q?br />{??人: 文g状态: [ ] 草稿 [√] 正式发布 [ ] 正在修改 {收日期Q?br />1?~写目的 使用l一的命名和~码规范Q数据库命名及~码风格标准化,以便于阅诅R理解和 l承?br />2?适用范围 本规范适用于公司范围内所有以ORACLE作ؓ后台数据库的应用pȝ和项目开发工作?br />3?对象命名规范 3.1 数据库和SID 数据库名定义为系l名+模块?br />Ø 全局数据库名和例ESID 名要求一?br />Ø 因SID 名只能包含字W和数字Q所以全局数据库名和SID 名中不能含有“_”等字符 3.2 表相?br />3.2.1 表空?br />Ø 面向用户的专用数据表I间以用户名+_+data命名 Q如Aud 用户专用数据表空间可?br />名ؓAud_data Ø 面向用户的专用烦引表I间以用户名+_+idx命名 W?/9?br />Ø 面向用户的专用时表I间以用户名+_+tmp命名 Ø 面向用户的专用回滚段表空间以用户?_+rbs 命名 Ø 面向应用的表I间以应用名+_data/应用?_idx/应用?_tmp/应用?_rbs 命名 Ø LOB D|据专用表I间以其数据表空?_+lobs 命名Q如上例中数据表I间?br />Aud_dataQ则LOB D表I间可命名ؓAud_data_lobs 3.2.2 表空间文?br />表空间文件命名以表空间名+两位数序?序号?1开?l成Q如Aud_data01 {?br />3.2.3 ?br />表命名要遵@以下原则Q?br />Ø 一般表采用“系l名+t_+模块?_+表义名?格式构成 Ø 若数据库中只含有单个模块Q命名可采用“系l名+t_+表义名”格式构?br />Ø 模块名或表义名均以其汉语拼音的首字符命名Q表义名中汉语拼韛_采用写Q且 字符间不加分割符Q?br />Ø 表别名命名规则:取表义名的前3 个字W加最后一个字W。如果存在冲H,适当?br />加字W(如取表义名的? 个字W加最后一个字W等Q?br />Ø 临时表采用“系l名+t_tmp_+表义名?格式构成 Ø 表的命名?br />dft_gy_cbapQ系l名Q电?dfQ?t_+模块名(高压 gyQ?_+表义名(抄表安排 cbapQ?br />dft_cbbj: pȝ名(电费 dfQ?t_+表义名(抄表标记 cbbjQ?br />dft_tmp_hj: pȝ名(电费 dfQ?tmp+表义名(合计hjQ?此处Z时表) Ø 兌表命名ؓRe_表A_表B,Re 是Relative的羃写,表A 和表B均采用其表义名或 ~写形式?br />3.2.4 属性(列或字段Q?br />属性命名遵循以下原则: Ø 采用有意义的列名Qؓ实际含义的汉语拼音的首字W,且字W间不加M分割W?br />Ø 属性名前不要加表名{作为前~ Ø 属性后不加Mcd标识作ؓ后缀 Ø 不要使用“ID”作为列?br />Ø 兌字段命名?“cd+_+兌表的表义名(或羃写)+_+字段名”进?br />W?/9?br />3.2.5 主键 Ø M表都必须定义主键 Ø 表主键命名ؓQ“pk+_+表名(或羃?+_+主键标识?br />如“pk_YHXX_IDKH”等 3.2.6 外键 表外键命名ؓQ?“fk+_+表名(或羃?+_主表?或羃?+_+主键标识?br />如“fk_YHLX_YHXX_SFZH”等 3.2.7 CHECKU束 CHECK U束命名为: “chk+_+CHECKU束的列名(或羃写)?br />3.2.8 UNIQUEU束 UNIQUE U束命名为: “unq+_+UNIQUEU束的列名(或羃写)?br />3.2.9 索引 索引的命名ؓQ“表名(或羃写)+_+列名+_idx”?br />其中多单词组成的属性列列名取前几个单词首字W再加末单词首字W组?br />如yd_kh 表khid 上的index: yd_kh_khid_idx 3.2.10 触发?br />Ø AFTER型触发器 pȝ?tr_+<表名>_+<i,u,d的Q意组?gt; +[_row] Ø BEFORE型触发器 pȝ?tr_+<表名>_+bef_<i,u,d的Q意组?gt;+[_row] Ø INSTEAD OF型触发器 pȝ?ti_+<表名>+_+<i,u,d的Q意组?gt;+[_row] Ø 各种cd的触发器?br />iQuQd 分别表示insert、update 和delete 行触发器,后加_row 标识Q语句触发器不加,?yddftr_CSH_i_row 3.2.11 ?br />W?/9?br />以中要存储的各个表(或表别名Q及表间加and的组?命名Q即表“A+And+表B…? 如存储GR(工h)和GRJNQ工人技能)表的命名ؓGRAndGRJN 3.3 视图 视图命名以系l名v_+模块名作为前~Q其他命名规则和表的命名cM 3.4 序列 序列命名以seq_+含义名组?br />3.5 同义?br />同义词命名与其基对象的名UC_但要去除其用户前~或含有远E数据库链接的后~ 3.6 存储对象相关 3.6.1 存储q程 存储q程命名由“系l名+sp+_+存储q程标识(~写)”组?br />存储q程标识要以实际含义的汉语拼音的首字W构成,q用下划U分割各个组成部分?br />如增加代理商的帐L存储q程为“sfsp_ZJDLSZH”?br />3.6.2 函数 函数命名由“系l名+f+_+函数标识”组?br />3.6.3 ?br />包命名由“系l名+pkg+_+包标识”组?br />3.6.4 函数文本中的变量采用下列格式命名Q?br />Ø 参数变量命名采用“i (o或io)+_+名称”Ş式,前缀i 或o 表输入还是输出参?br />Ø q程变量命名采用“l+_+名称”Ş?br />Ø 全局包变量命名采用“g+_+名称”Ş?br />Ø 游标变量命名采用“名U?_+cur”Ş?br />Ø 帔R型变量命名采用“c+_+名称”Ş?br />Ø 变量名采用小写,若属于词lŞ式,用下划线分隔每个单词 Ø 变量用来存放表中的列或行数据值时Q?TYPE?ROWTYPE 方式声明变量Q变量?br />W?/9?br />明的cd与表中的保持同步Q随表的变化而变?br />3.7 用户及角?br />Ø 用户命名由“系l名U?_+user+_+名词(或羃?或名词短?或羃?”组?br />Ø 角色命名由“系l名U?_+role+_+名词(或羃?或名词短?或羃?”组?br />3.8 数据库链?br />Ø 数据库链接命名由“远E服务器?_+数据库名+_+link”组?br />Ø 若远E服务器名和数据库名一_上式“_+数据库名”部分省?br />3.9 命名中的其它注意事项 Ø 命名都不得超q?0个字W?br />Ø 不要在对象名的字W之间留I格 Ø 心保留词,要保证你的命名没有和保留词、数据库pȝ或者常用访问方法冲H?br />4?~码规范 4.1 一般性注?br />4.1.1 注释可能简z、详l而全?br />4.1.2 创徏每一数据库对象时都要加上COMMENT ON注释Q以说明该对象的功能和用途;Ӟ Ҏ些数据列也要加上COMMENT ON注释Q以说明该列?或列取值的含义?br />如:XX 表中有CZZT列属性ؓNUMBER(10, 0)可加COMMENT ON 注释如下 COMMENT ON COLUMN XX.CZZT IS '0 = 正常, 1 = {待, 2 = 时, 3 = d' 4.1.3 注释语法包含两种情况Q单行注释、多行注?br />单行注释Q注释前有两个连字符Q?-Q,一般对变量、条件子句可以采用该cL释?br />多行注释Q符?*?/之间的内容ؓ注释内容。对某项完整的操作徏议用该cL释?br />4.2 函数文本注释 4.2.1 在每一个块和过E(存储q程、函数、包、触发器、视囄Q的开头放|注?br />/************************************************************************ W?/9?br />*name : --函数?br />*function : --函数功能 *input : --输入参数 *output : --输出参数 *author : --作?br />*CreateDate : --创徏旉 *UpdateDate : --函数更改信息Q包括作者、时间、更改内容等Q?br />*************************************************************************/ CREATE [OR REPLACE] PROCEDURE dfsp_xxx ?br />4.2.2 传入参数的含义应该有所说明。如果取D围确定,也应该一q说明。取值有特定含义 的变量(如booleancd变量Q,应给出每个值的含义?br />4.2.3 在每一个变量声明的旁边d注释。说明该变量要用作什?br />通常Q简单用单行注释就行了Q例?br />l_sfzh CHAR(11) --w䆾证号?br />4.2.4 在块的每个主要部分之前添加注?br />在块的每个主要部分之前增加注释,解释下—组语句目的Q最好是说明该段语句及算 法的目的以及要得到的l果Q但不要对其l节q行q多的描q?br />4.2.5 在块和过E的开头注释中q可以增加要讉K的数据库{信?br />4.3 常用SQL 语句的编写规?br />4.3.1 CREATE语句 CREATE TABLE dft_dksz( YHBS VARCHAR2(20) NOT NULL, ZHGX DATE, DKKHD VARCHAR2(24), CONSTRAINT pk_dksz_yhbs PRIMARY KEY (YHBS) ) 4.3.2 SELECT语句 查询语句采用以下原则~写Q可最大化重用׃n池中的SQL 语句Q提高应用程序性能Q: Ø SELECT 语句分ؓ5部分: Q?Q?由SELECT 开_后跟一个显C查询结果的列表Q?br />W?/9?br />Q?Q?由FROM 开_后跟一个或多个获取数据所涉及的表Q?br />Q?Q?由WHERE 开_后跟一个或多个定所需值的条gQ?br />Q?Q?由GROUP BY开_后跟一个或多个表列名,通过q些列以Ҏ询结果进行汇总; Q?Q?由ORDER BY开_后跟一个或多个表列名,通过q些列以Ҏ询结果进行排序?br />Ø 每个部分分行~写Q将每一行的W一个关键字与第一行的SELECTN寚wQ如 SELECT col1, col2, col3 FROM table1 WHERE col1 > col2 GROUP BY col1, col2 ORDER BY col1; Ø 关键字用大写Q列名和表名采用写 Ø 语句中嵌入逗号Ӟ在逗号后面加一I格Q当逗号是最后一个字W时Q把它放在本?br />Ø 当语句的同一部分要gl到下一行时Q按下列格式排列Q?br />SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 Ø 语句中WHERE 和AND 部分格式化,书写布局cM?br />WHERE AND AND Ø 当语句中出现括号Ӟ括号的两边不留空?br />Ø 在SQL 语句使用q算W时Q操作两边应各留一个空|?br />WHERE X = Y AND A = B AND C = D 4.3.3 INSERT语句 INSERT INTO <要插入的表名> (<?>, <?>, .., <列n-1>, <列n>) VALUES (<??gt;, <??gt;, .., <列n-1?gt;, <列n?gt;) 4.3.4 UPDATE语句 UPDATE <要更新的表名> SET <要更新的?gt; = <列?gt; 4.3.5 DELETE语句 DELETE FROM table1 WHERE col1 = '???' W?/9?br />4.4 条g执行语句(IF)~写规范 条g执行语句IF…ELSE 按以下格式编?br />IF <条g表达?gt; THEN <一条或多条语句> [ELSE (或ELSIF<条g表达?gt;) THEN <一条或多条语句> END IF; ? Q?Q?在IF…THEN和ELSE(或ELSIF)及ELSE…THEN和END IF间可包含一条或多条PL/SQL 语句Q而不需要加BEGIN 和END Q?Q?IF…ELSE…ENDIF 语句可以嵌套 Q?Q?注意ELSIF的写?br />4.5 循环语句~写规范 4.5.1 单@环语?br />LOOP <零条或多条语?gt; EXIT WHEN <条g表达?gt; <零条或多条语?gt; END LOOP; 4.5.2 FOR循环语句 FOR 变量 IN [变量取D围] LOOP <一条或多条语句> END LOOP; 4.5.3 WHILE循环语句 WHILE <条g表达?gt; LOOP <一条或多条语句> END LOOP; 4.6 函数文本Q存储过E、函数和包等Q?br />W?/9?br />Ø 对于存储q程、函数等E序块都要有异常处理部分Q在异常部分的最后都要设|OTHERS 异常情态处理器Q以提高E序的自能力Q格式如下: BEGIN ?br />EXCEPTION WHEN excep—name1 THEN ?br />WHEN excep—name2 THEN ?br />WHEN OTHERS THEN ?br />END; Ø 对于子程序、触发器、包{带名的E序块,要用结束标识,?br />CREATE OR REPLACE PROCEDURE XXXsp_XXX IS ?br />BEGIN ?br />END XXXsp_XXX;/* 此处的过E名XXXsp_XXX是可选的Q规范要求写上,与块开始的CREATE相对?*/ |
Code: | [Copy to clipboard] | |
|
Quote: | |
|
1. 使用cube函数的介l?br />
|
Quote: | |
|
2. rank函数的介l?br /> 介绍完rollup和cube函数的?下面我们来看看rankpd函数的用方? 问题2.我想查出q几个月份中各个地区的总话费的排名.
|
Quote: | |
|
Quote: | |
|
DEPTID | PAREDEPTID | NAME |
NUMBER | NUMBER | CHAR (40 Byte) |
部门id | 爉门id(所属部门id) | 部门名称 |
通过子节点向根节点追? select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节炚w历子节点. select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid 可通过level 关键字查询所在层? select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid 再次复习一?start with ...connect by 的用法, start with 后面所跟的是是递归的种子? 递归的种子也是递归开始的地方 connect by 后面?prior" 如果~省Q则只能查询到符合条件的起始行,q不q行递归查询Q? connect by prior 后面所攄字段是有关系的,它指明了查询的方向? |