ORACLE 第16讲 开发PL SQL子程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第16讲开发PL/SQL子程序

1、使用过程

过程定义:

CREATE[OR REPLACE]PROCEDURE过程名(参数1定义,参数2定义...)

IS|AS

变量声明部分

BEGIN

可执行部分

EXCEPTION

异常处理部分

END;

参数的定义形式:

参数名参数传递模式数据类型:=默认值

其中参数名和数据类型是必不可少的部分,其他两部分是可以省略的。参数传递模式包括IN、OUT以及IN OUT三种形式,其中IN是默认的传递模式,如果没有指定,则默认为IN,它指的是从调用者向过程中传递一个实际参数。

OUT是指从过程中向调用者传递参数,如果要使用这种传递模式,则需要明确指定。

在调用过程时,过程的执行情况会影响这个变量的值。

“IN OUT”是一种双向传递模式,一方面从调用者向过程传递参数,另一方面从过程向调用者传递结果,如果要使用这种形式,则需要明确指定。

“:=默认值”等价于“DEFAULT默认值”。

删除过程:

DROP PROCEDURE过程名;

例1:编写一个添加员工基本信息的过程。

解决步骤:

(1)不考虑异常的解决方法

最简单的过程:

create or replace procedure add_emp(

v_empno number,

v_ename varchar2,

v_sal number,

v_job varchar2default'CLERK',

v_deptno in emp.deptno%type

)

is

begin

insert into emp(empno,ename,sal,job,deptno)

values(v_empno,v_ename,v_sal,v_job,v_deptno); end;

/

执行过程:

SQL>exec add_emp(1000,'张三',1500,'CLERK',10);

(2)考虑异常的解决方法

带有异常处理的过程:

create or replace procedure add_emp(

v_empno number,

v_ename varchar2,

v_sal number,

v_job varchar2default'CLERK',

v_deptno in emp.deptno%type

)

is

e_deptno exception;

pragma exception_init(e_deptno,-02291);

begin

insert into emp(empno,ename,sal,job,deptno)

values(v_empno,v_ename,v_sal,v_job,v_deptno);

exception

when dup_val_on_index then

raise_application_error(-20000,'雇员号不能重复');

when e_deptno then

raise_application_error(-20001,'部门号不存在'); end;

/

执行过程:

SQL>exec add_emp(1002,'张三',1500,'CLERK',10);

例2:编写一个查询雇员工资的过程

解决步骤:

(1)创建带有输出参数过程:

create or replace procedure get_sal(

v_empno in emp.empno%type,

v_sal out emp.sal%type

)

is

begin

select sal into v_sal from emp where empno=v_empno;

exception

when no_data_found then

raise_application_error(-20000,'雇员编号没找到');

end;

/

(2)调用过程:

set serveroutput on;

declare

v_sal emp.sal%type;

begin

get_sal(&empno,v_sal);

dbms_output.put_line('雇员工资:'||v_sal);

end;

/

练习1:编写一个添加部门信息的过程。

练习2:编写一个依据部门号查询部门名称的过程。

2、使用函数

函数是另一种形式的子程序,它不仅可以像过程那样定义数据和类型,传递参数,还可以向调用者返回执行结果。

函数的定义:

CREATE[OR REPLACE]FUNCTION函数名(参数1,参数2...)RETURN数据类型

IS|AS

声明部分

BEGIN

可执行部分

EXCEPTION

异常处理部分

END;

其中参数的定义、传递模式都与在过程中的情况是相同的。在函数头部必须带RETURN 子句。

删除函数:

DROP FUNCTION函数名;

例:依据部门编号,求部门平均工资。

相关文档
最新文档