子程序的介绍:•命名的PL/SQL块,能够接受传递的参数,能够被调用。•子程序的类型过程:用于执行某项操作函数:用于执行某项操作并返回值•基于标准的PL/SQL块结构声明部分可执行部分异常部分(可选)优点:–模块化将程序分解为多个逻辑模块–可重用性子程序在被执行之后,被存储在数据库中,可以在任意数目的应用程序中使用–可维护性子程序简化了维护–提高性能用户直接使用共享池中解析后的程序存储过程:•命名的PL/SQL块•能够接受参数•能够被重复调用•用于执行某项操作•存储在数据库中形式参数与实际参数形式参数:在子程序说明的参数列表中声明的变量CREATEPROCEDUREraise_sal(p_idNUMBER,p_amountNUMBER)...ENDraise_sal;•实际参数:在子程序被调用的参数列表中引用的变量或表达式raise_sal(v_id,2000)创建带参数的过程参数模式IN是默认的参数模式。换句话说,如果未指定一个参数的模式,该参数就被认为是一个IN参数。参数模式OUT和INOUT必须在参数的前面被明确指定。一个IN模式的形式参数不能被指定一个值,就是说,一个在过程体中的IN参数不能被修改。一个OUT或INOUT参数在返回主叫环境之前必须被指定一个值。IN参数可以在参数列表中被指定一个默认值。OUT和INOUT参数不能被指定默认值。默认情况下IN参数是引用传递,而OUT和INOUT参数是值传递。1.createorreplaceprocedureraise_sal2.(p_idinemp.empno%type,3.p_nameoutvarchar2,4.p_saloutnumber)5.Is6.begin7.selectsal,enameintop_sal,p_name8.fromemp9.whereempno=p_id;10.endraise_sal;1.DECLARE2.v_salemp.sal%type;3.v_nameemp.ename%type;4.BEGIN5.raise_sal(7369,v_sal,v_name);6.dbms_output.put_line('雇员:'||v_name||'的薪水是'||v_sal);7.END;声明主机变量,执行raise_sal过程1.VARIABLEg_salNUMBER2.VARIABLEg_nameVARCHAR2(25)3.EXECraise_sal(7369,:g_name,:g_sal)用VARIABLE命令创建主机变量。调用raise_sal过程,提供这些主机变量作为OUT参数。在EXECUTE命令中引用主机变量时,注意冒号(:)的使用。传递参数的方法•位置:实际参数与形式参数排列的顺序相同•指定:实际参数联合其相应的形式参数以任意顺序排列•组合:实际参数的排列一些用位置,一些用指定1.CREATEORREPLACEPROCEDUREraise_sal2.(p_idINemp.empno%typedefault7369,3.p_nameOUTvarchar2,4.p_salINOUTnumber)5.IS6.BEGIN7.UPDATEemp8.SETsal=sal+p_sal9.WHEREempno=p_id;10.11.SELECTsal,enameINTOp_sal,p_name12.FROMemp13.WHEREempno=p_id;14.ENDraise_sal;异常处理:当一个异常发生时,控制立即转向块的异常部分。如果异常被处理,块终止运行,并且控制转向主叫程序。1.CREATEORREPLACEPROCEDUREtest12.IS3.v_deptnodept.deptno%type;4.BEGIN5.insertintodeptvalues(60,'nuc','kitty');6.selectdeptnointov_deptnofromdept7.wheredeptno=99;8.EXCEPTION9.WHENNO_DATA_FOUNDTHEN10.dbms_output.put_line('内部执行的异常');11.END;12.13.CREATEORREPLACEPROCEDUREtest14.IS15.BEGIN16.insertintodeptvalues(70,'micro','NEWYORK');17.test1();18.EXCEPTION19.WHENNO_DATA_FOUNDTHEN20.dbms_output.put_line('外部执行的异常');21.END;删除存储在数据库中的过程DROPPROCEDUREprocedure_name权限授予:•为了能够在子程序中引用和访问不同方案中对象,必须被明确地授予访问引用对象的权限,不能通过角色授权。PLSQL对象信息存储:通过以下方法查看PL/SQL对象的存储信息:–user_objects–user_source–descobject_name–showerr–dbms_output通过user_objects视图查看PL/SQL对象的信息;通过user_source视图查看PL/SQL对象的程序文本;desc查看对象的结构;showerr查看对象在编译过程中出现的错误;通过dbms_output包查看PL/SQL对象的调试信息;USER_OBJECTS:1.SELECTobject_name,object_type,status2.FROMuser_objects3.WHEREobject_typein('PROCEDURE','FUNCTION')4.ORDERBYobject_name;USER_SOURCE:1.SELECTtext2.FROMuser_source3.WHEREname='GET_SAL'4.ORDERBYline;USER_ERROR: