资源描述:
《存储过程基础培训.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、存储过程基础培训日达计算机系统(成都)有限公司2007年4月简介什么是存储过程呢?将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程的优点:1.执行速度快:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次.。2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一
2、起使3.存储过程可以重复使用,可减少数据库开发人员的工作量4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权种类1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,如sp_help就是取得指定对象的相关信息2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能如: execmaster..xp_cmdshell'ping10.8.16.1'3.用户自定义的存储过程,这是我们所指的存储过程SqlplusSqlplus用户明/密码◎查看有几张表select*fromtab;◎ed可以进行编辑◎/重复命令◎合
3、并字符串
4、
5、◎查看表的结构desc表名◎sql中字符串用单引号◎主建可以由多个字段组成◎外键不能为空,且一定要在另张表中存在◎可以使用@加文件名就可以在sqlplus中执行其中的plsql语句◎使用%type使得定义存储过程中的变量的时候与表中的类型一致创建及执行创建脚本CREATEPROCEDURE存储过程名ASselectuseridfromUSERSorderbyuseriddesc执行脚本executeprocedure存储过程名(参数1,参数2)CreateCREATEPROCEDURE存储过程名字(参数1INNUMBER,参数2I
6、NNUMBER)AS/IS--变量定义Declare变量类型;--初始化参数变量1INTEGER:=0;变量2DATE;BEGINEND例如:CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) ASEGINUPDATE accounts SET balance = balance + amountWHERE account_id = acc_no;END;备注:注释用:--说明V_TEST:=123;可以使用createorreplaceprocedure语句,这个语句的用处
7、在于,你之前赋予的excute权限都将被保留。IN,OUT,INOUT用来修饰参数。IN:表示这个变量必须被调用者赋值然后传入进行处理。OUT:表示PRCEDURE通过这个变量将值传回给调用者。INOUT:则是这两种的组合。变量赋值:例如V_TEST:=123;变量SELECTINTOSTATEMENT将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)例子:BEGINSELECTcol1,col2into变量1,变量2FROMtypestructwherexx
8、x;EXCEPTIONWHENNO_DATA_FOUNDTHENxxxx;END;...例子createorreplaceprocedureget_newsasaanumber;beginselectcount(*)intoaafromcf_news;dbms_output.put_line('aa='
9、
10、aa);end;IFIF条件THENBEGINdosomethingEND;ENDIF;空语句if(true)then null;endif;whileWHILE条件LOOPBEGINdosomethingEND;ENDLOOP;cu
11、rsor用forin使用cursor...ISCURSORcurISSELECT*FROMxxx;BEGINFORcur_resultincurLOOPOpencur_result;-打开游标V_SUM:=cur_result.列名1+cur_result.列名2END;ENDLOOP;closecur_result;-关闭游标END;带参数的cursor带参数的cursorCURSORC_USER(C_IDNUMBER)ISSELECTNAMEFROMUSERWHERETYPEID=C_ID;OPENC_USER(变量值);LOOPFETCHC_US
12、ERINTOV_NAME;EXITFETCHC_USER%NOTFOUND;dosomethi