oracle子程序和包

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

实验: 子程序和包

实验目的

(1)掌握函数和子程序的创建和使用。

(2)掌握带参数的子程序的使用。

(3)掌握包的创建和使用。

实验内容

1、编写一个包emp_package,用来对emp表进行操作。其中应包含以上几个功能:

(1)编写一个不带参数的过程dept_pro,功能是输出每个部门名称和部门人数,建议使用游标。

SQL> ed

已写入file afiedt.buf

1 create procedure emp_pro

2 is

3 CURSOR dept_cur IS select dname,count(empno)人数from emp,dept

4 where emp.deptno=dept.deptno group by dname;

5 begin

6 for v_dept in dept_cur loop

7 dbms_output.put_line(v_dept.dname||' '||v_dept.人数);

8 end loop;

9* end;

SQL> /

过程已创建。

(2)输入职工编号,得到职工姓名的存储过程或函数emp_pro或emp_fun

CREATE OR REPLACE PROCEDURE emp_pro

(

p_name OUT emp.ename%type,

p_sal OUT emp.sal%type,

p_eno IN emp.empno%type

)

IS

begin

-- Test statements here

select ename,sal into p_name,p_sal

from emp where empno=p_eno;

end;

CREATE OR REPLACE FUNCTION emp_fun(p_eno emp.empno%type)

RETURN emp.ename%type

IS

v_ename emp.ename%type;

begin

-- Test statements here

select ename into v_ename

from emp where empno=p_eno;

return v_ename;

end;

(3)编写一个函数dept_fun,向函数传递一个部门号,如果dept表中不包含这个部门号,则返回”无此部门。

SQL> ed

已写入file afiedt.buf

1 CREATE OR REPLACE FUNCTION dept_fun(v_deptno NUMBER:=&deptno)

2 RETURN dept.dname%type

3 IS

4 v_dname dept.dname%type;

5 begin

6 -- Test statements here

7 select dname into v_dname

8 from dept where deptno=v_deptno;

9 return v_dname;

10 EXCEPTION

11 WHEN NO_DA TA_FOUND THEN

12 DBMS_OUTPUT.PUT_LINE('无此部门');

13* end;

SQL> /

输入deptno 的值: 10

原值1: CREATE OR REPLACE FUNCTION dept_fun(v_deptno NUMBER:=&deptno)

新值1: CREATE OR REPLACE FUNCTION dept_fun(v_deptno NUMBER:=10)

函数已创建。

2、使用EXECUTE、SELECT或PL/SQL程序块来调用包中的过程和函数。

SQL> EXECUTE emp_pro

PL/SQL 过程已成功完成。

SQL> SET SERVEROUTPUT ON

SQL> EXECUTE emp_pro

ACCOUNTING 3

RESEARCH 5

SALES 6

PL/SQL 过程已成功完成。

SQL> select dept_fun(10) from dept;

DEPT_FUN(10)

--------------------------------------------------------------------------------

ACCOUNTING

ACCOUNTING

ACCOUNTING

ACCOUNTING

SQL> select dept_fun(20) from dept;

DEPT_FUN(20)

--------------------------------------------------------------------------------

RESEARCH

RESEARCH

RESEARCH

RESEARCH

SQL> select dept_fun(90) from dept;

select dept_fun(90) from dept

*

第1 行出现错误:

ORA-06503: PL/SQL: 函数未返回值

ORA-06512: 在"SCOTT.DEPT_FUN", line 13

ORA-06512: 在line 1

相关文档
最新文档