SQL高级编程7.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:95 大小:1.2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

SQL高级编程7.ppt

SQL高级编程7.ppt

预览

免费试读已结束,剩余 85 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第七章:PL/SQL高级编程第一节存储过程函数的概念第二节包第三节触发器第一节存储过程函数的概念开发一个存储过程或函数目的是把一个PL/SQL块存进数据库中,并在以后重复使用。例如:创建一个记录用户名和当前日期的无参数过程CREATEPROCEDURElog_executionISBEGININSERTINTOlog_table(user_id,log_date)VALUES(user,sysdate);END;/可以在不同的环境调用同一个存储过程。注意:语法有区别●在SQL*Plus中记录用户名和当前日期SQL>EXECUTElog_execution;●从存储过程FIRE_EMP中记录用户名和当前日期CREATEPROCEDUERfire_emp(v_emp_noINemp.empno%TYPE)ISBEGINlog_execution;DELETEFROMempWHEREempno=v_emp_no;END;/一、存储过程与应用程序的区别二、开发存储过程和函数1、开发一个存储过程和函数的步骤(1)用文本编辑器编写一个含有CreateProcedure或CreateFunction语句的PL/SQL脚本文件。(如:c:\procedure1.sql)(2)在SQL*Plus中用命令(如:SQL>startc:\procedure1.sql;)编译脚本文件,调试编译错误。系统就将创建过程或函数的源代码存入数据字典user_source中。(3)编译成功后将编译代码存入数据字典(4)调用存储过程和函数,在运行期间调试存储过程、函数的逻辑错误。2、创建存储过程的语法CREATE[ORREPLACE]PROCEDURE过程名[(参数名[IN|OUT|INOUT]数据类型,…)]{IS|AS}[说明部分]BEGIN语句序列[EXCEPTION出错处理]END[过程名];★形式参数可以有三种模式----IN、OUT、INOUT。如果没有为形式参数指定模式,那么缺省的模式是IN。类型描述--------------------------------------------------------------------IN(缺省)参数用来从调用环境中向过程传递值OUT参数用来从过程中返回值给调用者INOUT参数既可从调用者向过程中传递值,也可以从过程中返回可能改变了的值给调用者局部变量在过程内部存放值例:下面的过程说明了三种模式参数的区别createorreplaceproceduremodetest(p_inparameterinnumber,p_outparameteroutnumber,p_inoutparameterinoutnumber)isv_localvariablenumber;beginv_localvariable:=p_inparameter;/*正确*/(p_inparameter:=7;错误)v_outparameter:=7;/*正确*/(v_localvariable:=p_outparameter;错误)v_localvariable:=p_inoutparameter;/*正确*/v_inoutparameter:=7;/*正确*/end;/例:下列存储过程给某一指定的员工涨指定数量的工资。Createprocedureraise_salary(emp_idinteger,v_increasereal)isbeginupdateempsetsal=sal+v_increasewhereempno=emp_id;commit;end;/例:下列过程根据给定的员工号返回员工的姓名、工资和奖金等信息。CREATEORREPLACEPROCEDUREquery_emp(v_emp_noINemp.empno%TYPE,V_emp_nameOUTemp.ename%TYPE,v_emp_salOUTemp.sal%TYPE,V_emp_commOUTemp.comm%TYPE)ISBEGINSELECTename,sal,commINTOv_emp_name,v_emp_sal,v_emp_commFROMempWHEREempno=v_emp_no;ENDquery_emp;/例:利用INOUT模式参数,将一个7位数字的电话号码转换成8位数字的电话号码。CREATEORREPLACEPROCEDUREadd_dash(v_phone_noINOUTVARCHAR2)/*字符型的形式参数不指定长度*/ISBEGINv_phon