Oracle下SQL编程标准

更新时间:2023-05-12 10:21:55 阅读: 评论:0

1.视图利用标准
视图的命名规那么
1、视图名用V_开头,视图名长度不能超过30个字符。视图名用大写的英文单词来表示。
2、视图由几个表产生就用下划线(_)连接几个表的名,若是表过量能够将表名适当简化,但必然要列出所有表名。
必需在视图中指定每列名称的情形
1、视图中有任何从算术表达式、内置函数或常量派生出的列。
2、视图中两列或多列具有相同名称(通常由于视图概念包括联接,而来自两个或多个不同表的列具有相同的名称)。
3、希望使视图中的列名与它的源列名不同。(也能够在视图中重命名列。)不管重命名与否,视图列都会继承其源列的数据类型。
其他
1、不能将AFTER触发器与视图相关联,只有INSTEAD OF触发器能够与之相关联。
2、概念视图的查询不能够包括ORDER BY、COMPUTE或COMPUTE BY子句或INTO关键字,不然会占用大量时刻。
3、不能在视图上概念全文索引概念。
4、不能创建临时视图,也不能在临时表上创建视图。
5、不能除去参与到用SCHEMABINDING子句创建的视图中的表或视图,除非该视图已被除去或更改而再也不具有架构绑定。另外,若是参与具有架构绑定的视图的表执行ALTER TABLE语句阻碍视图概念,那么这些语句将失败。
6、不能对视图执行全文查询,可是若是查询所引用的表被配置为支持全文索引,就能够够在视图概念中包括全文查询。
7、一样不建议试图套视图的建法,一个是逻辑太复杂,第二是若是底层视图发生问题,那级联的所有视图都有问题。
8、对多个表关联的查询成立视图,注意表间关键的字段和条件字段是不是用到索引。因为视图其实确实是SQL,只只是封装了下,成立一个多表关联而又没有合理利用索引的视图,效率是很低的。
2.触发器利用标准
触发器命名标准
1、触发器名用Tr_开头,触发器名长度不能超过30个字符。必需缩写表名,以便附加触发器属性信息。触发器名用小写的英文单词来表示。
2、
触发器利用标准
1、触发器的利用,应该放在关键的,多方发起的,高频访问的数据表上。过量利用触发器,会增加数据库负担,降低数据库性能。
2、一个数据表能够有多个触发器,可是一个触发器只能对应一个表。
3、Truncate Table语句尽管类似于Delete语句能够删除记录,可是它不能激活Delete类型的触发器。因为Truncate Table语句是不记入日记的。
4、WRITETEXT语句不能触发Inrt和Update型的触发器。
5、不同的SQL语句,能够触发同一个触发器,如Inrt和Update语句都能够激活同一个触发器
2.3触发器编写标准
1、触发器代码的大小不能超过32K。若是确实需要利用大量代码成立触发器,应该第一成立存储进程,然后在触发器中利用call语句挪用存储进程
2、触发器只能包SELECT,INSERT,UPDATE,DELET语句,而不能包括DDL语句(CREATE,ALTER,DROP)和事务操纵性语句(COMMIT,ROLLBACK和SAVEPOINT),也禁止直接或间接地挪用含有上属于据的存储进程。
3、触发器不同意参数,一个表最多可有12个触发器(触发器类型恰好是12种),而且保证触发器操作不冲突,同一时刻,同一事件,同一类型的触发器只能有一个。
4、建议不要让触发器返回任何结果。因为对这些返回结果的特殊处置必需写入每一个许诺对触发器表进行修改的应用程序中。为了阻止从触发器返回任何结果,不要在触发器内概念包括SELECT语句或变量赋值。若是必需在触发器中进行变量赋值,那么应该在触发器的开头利用SET NOCOUNT ON语句以幸免返回任何结果集。
5、在DML触发器中不能利用的语句
不能利用的语句        语句功能
Alter Databa          修改数据库
Create Databa          新建数据库
Drop Databa          删除数据库
Load Databa          导入数据库
Load Log                导入日记
Reconfigure            更新配置选项
Restore Databa        还原数据库
Restore Log            还原数据库日记
成立INSTEAD OF触发器标准
1、不能在带有WITH CHECK OPTION概念的视图中创建INSTEAD OF触发器。
2、INSTEAD OF选项只适用于视图。
3、当基于视图成立触发器时,不能指定before和after选项。
4、在同一个数据表中,对每一个操作(如Inrt、Update、Delete)而言能够成立许多个After触发器,但Instead Of触发器针对每一个操作只有成立一个。
5、当做立INSTEAD OF触发器时,必需指定for each row选项。
6、
3存储进程利用标准
3.1 存储进程命名标准
1、存储进程名用Pr_开头,存储进程名长度不能超过30个字符。存储进程名用小写的英文单词来表示。
2、关于类型的声明,尽可能利用%TYPE及%ROWTYPE方式进行,预防因数据库的变更对程序的阻碍。
编写存储进程的注意点
3.3.1SQL的利用标准
1、尽量幸免大事务操作,慎用holdlock子句,提高系统并发能力。
2、尽可能幸免反复访问同一张或几张表,尤其是数据量较大的表,能够考虑先依照条件提取数据到临时表中,然后再做连接。
3、尽可能幸免利用游标,因为游标的效率较差,若是游标操作的数据超过1万行,那么就应该改写;若是利用了游标,就要尽可能幸免在游标循环中再进行表连接的操作。
4、注意where字句写法,必需考虑语句顺序,应该依照索引顺序、范围大小来确信条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。
5、不要在where子句中的“=”左侧进行函数、算术运算或其他表达式运算,不然系统将可能无法正确利用索引。
6、尽可能利用exists代替lect count(1)来判定是不是存在记录,count函数只有在统计表中所有行数时利用,而且count(1)比count(*)更有效率。
7、依照处置逻辑,程序中可能要做几个动作或运算,每一个动作或运算作为一个逻辑区块处置,应利用BEGIN <<c1>>及END c1进行相应的标识。
8、注释分为两种情形,即单行注释和多行区块注释。格式别离如下:
-- 单行注释例如
/**
* 多行区块注释
*/
关于每一个PL/SQL程序要在开始的多行区块注释中写明该段代码的书写人,创建日期,功能描述,修改日记内容。
9、代码之间空行不要超过一行,子程序之间空两行。
10、利用制表符(TAB)操纵文本缩进。
11、关于可能碰到的异样要提早作出预定,并在其可能发生的位置上将其捕捉处置掉。
12、删除不利用的变量:在程序编译以后,会提示那些变量没有利用到,关于这些没有效到的变量需要把它删除掉。
13、幸免变量循环利用:一个变量在一个区块中利用即可,不要循环利用,以幸免因此产生的问题。
14、尽可能利用“>=”,不要利用“>”。 viii. 注意一些or子句和union子句之间的替换。
15、注意表之间连接的数据类型,幸免不同类型数据之间的连接。
16、注意Oracle存储进程中参数和数据类型的关系。
17、注意inrt、update操作的数据量,避免与其他应用冲突。若是数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。
3.3.2循环的利用标准
1、关于FOR和WHILE循环不要EXIT和RETURN;
2、仅在执行指定次数时利用FOR循环;
3、仅在条件边界为FALSE时退出循环;
4、Cursor FOR loop通常效率均比OPEN-FETCH-EXIT-CLOSE好,而且后者更复杂;作为一个规那么,仅在以下情形下利用OPEN-FETCH-EXIT-CLOSE:
1)要与游标变量一路工作,编译器不能自动声明ref cursors的cursor%ROWTYPE;
2)希望在循环后保留值。
3)利用匿名游标循环,FOR r IN (SELECT cols FROM sometable) LOOP;可是不能重用,也不能利用cursor's %ROWTYPE。
3.3.3索引的利用标准
1、索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。
2、尽可能的利用索引字段作为查询条件,尤其是聚簇索引,必要时能够通过index index_name来强制指定索引。

本文发布于:2023-05-12 10:21:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/598140.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:触发器   视图   利用   不能   语句   进行   数据库
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图