欢迎来到天天文库
浏览记录
ID:17944270
大小:407.56 KB
页数:14页
时间:2018-09-11
《oracle技术实践总结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle实践总结李海栋正文之前,先来段废话哈!前端时间上线了一个项目。在这个项目中,我第一次全权负责数据库相关的工作。经过一番摸爬滚打,oracle的水平蹭蹭的涨啊。期间积累了不少经验和技术(都是些简单的东西,老鸟略过)。望新人读后有所进步!另外,如果老鸟可以指出我的错误,我将不胜感激!关于存储过程存储过程可以简单理解为在数据库上存储的并且经过编译的一小段代码,它直接运行在数据库上。网络上关于存储过程的教程很多。我就不摆了。谈一下自己的一点感受吧。游标的效率游标的效率很低。如果数据量大,它的效率会低到无法想像!我曾经一个游标要跑8个小时(30W不到的记录)
2、!这是什么概念!能直接写SQL的就直接写SQL。实在不行了再考虑用游标!另外,SQL是支持一次DML多条记录的。如果不懂可以谷歌一下insertintoselect等。游标的范本这里提供一个游标书写的范本。我每次用时,就copy一下。省心省力啊!--这里以store表为例:--定义游标,黑体字部分替换为要循环的select语句!cursorc_storeisselect*fromstores;--用游标的记录类型来定义循环中的一条记录。v_store就类似于一个pojo类。取得字段值可以用v_store.field1的形式。v_storec_store%row
3、type;openc_name;--打开游标loop--开始循环fetchc_storeintov_store;--把游标的变量set到v_store变量中exitwhenc_store%notfound;--如果游标为空,则退出游标--逻辑处理代码endloop;--结束循环closec_store;--关闭游标如何给变量赋值一般有两种方式:1直接赋值比如,v_num:=2;2通过select赋值比如,selectt.idintov_numfromtable1t;调试存储过程存储过程是可以调试的。这里以PL/SQL为例,讲解如何调试存储过程。1写好一个存储过
4、程后,右击点击测试,会弹出一个窗口,窗口里是一个pl/sql块,块里包含你写的存储过程:2点击菜单栏的调试下的开始:进入如下:点击,就可以调了,和java差不多的(都是基于栈的)。要看变量的值,直接把鼠标指向变量就可以了。做的比eclipse还人性化!大家自己试试看吧。关于大小写和单双引号网上的教程没有一篇介绍到位的(反正我没有找到!)。这里我详细解释一下。Oracle的大小写和单引号,双引号密切相关。Oracle里的对象,比如表名(包括表别名),列名(包括列别名),函数名,过程名,序列名,索引名等等。不加双引号时,不论你起的名字是大写,还是小写,混写,真正存
5、到oracle里的都是大写!但是一旦加上双引号。就是大小写敏感了!比如select*fromt1;查的表是T1表。Createtablet1,存的也是T1select*from“t1”;查的就是t1表。Createtable“t1”,存的也是t1小写的表和大写的表完全是两张表!另外oralce的对象是不可以加单引号的。单引号是加在常量字符串上的。常量字符串本来就是区分大小写的。没有什么“加了就大小写敏感,不加就不敏感”的说法。常量字符串不能加双引号!只能加单引号。而且不加单引号也是不可以的。因为只有变量才可以不加单引号。存储过程,函数等中的变量,是不区分大小写
6、的,当然也不能加任何引号了。比如v_num和v_NUM是同一个变量,没有任何区别!在常量字符串中,单引号和双引号的表达表达单引号,则需要写两个单引号。比如:查询某个字段中有单引号的记录,要这么写like'%''%';两个单引号表达一个单引号。注意:两个单引号和一个双引号是完全不同的!两个单引号是两个字符。一个双引号是一个字符!不要以为长相一样就是一样的啊!表达双引号,就直接写在字符串里,无需转义!比如查询某个字段中包含双引号的记录,要这么写like‘%”%’此时双引号和表名,列名无关。只是一个字符串里的字符而已。此时,双引号也没必要成对出现!其它注意事项1注意
7、写ifelse中elseif的写法是elsif!不仅elseif中没有空格,还少了个e!2写pl/sql块是可以用declare,但是在存储过程里不用写,直接在createorreplaceprocedurep_xxxis之后定义变量就可以了!(在begin里面嵌套的begin之前是可以使用declare的)。3在使用selectt.idintov_numfromtabletwhere…这样的赋值语句中要注意如果无法保证只select一条记录,需要进行if判断。否则要抛错!4如果你没有在存储过程中写commit和rollback。按照Oracle的原则,存储过
8、程出错时会回滚所有的操作。千万不要在中
此文档下载收益归作者所有