创建过程函数和包Word文件下载.docx

上传人:b****6 文档编号:19263137 上传时间:2023-01-04 格式:DOCX 页数:10 大小:16.69KB
下载 相关 举报
创建过程函数和包Word文件下载.docx_第1页
第1页 / 共10页
创建过程函数和包Word文件下载.docx_第2页
第2页 / 共10页
创建过程函数和包Word文件下载.docx_第3页
第3页 / 共10页
创建过程函数和包Word文件下载.docx_第4页
第4页 / 共10页
创建过程函数和包Word文件下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

创建过程函数和包Word文件下载.docx

《创建过程函数和包Word文件下载.docx》由会员分享,可在线阅读,更多相关《创建过程函数和包Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。

创建过程函数和包Word文件下载.docx

等价于end;

/

--下面是在PL/SQL中执行存储过程

begin

my_proc;

end;

--下面是在SQLPLUS中执行存储过程

executemy_proc;

等价于execmy_proc;

 

Rem2、创建带参数的存储过程

createtablet(

n_varnumber

);

CREATEORREPLACEPROCEDUREinsert_into_t(p_parminnumber)AS

---------start----------------------'

insertintotvalues(p_parm);

endinsert_into_t;

executeinsert_into_t(p_parm=>

100);

executeinsert_into_t(200);

Rem3、创建带参数带默认值的存储过程

RemOUT和INOUT参数不能有默认值

CREATEORREPLACEPROCEDURE

default_values(p_parm1varchar2,

p_parm2varchar2default'

Lemon'

p_parm3varchar2default'

Oracle'

)AS

DBMS_OUTPUT.PUT_LINE(p_parm1);

DBMS_OUTPUT.PUT_LINE(p_parm2);

DBMS_OUTPUT.PUT_LINE(p_parm3);

enddefault_values;

--下面是在SQLPLUS中执行存储过程,=>

表示命名参数,可以采用无顺序传递

execdefault_values('

.net'

p_parm3=>

'

Java'

Rem4、创建带OUT参数的存储过程

emp_lookup(p_empnoinnumber,

o_enameoutemp.ename%type,

o_saloutemp.sal%type)AS

selectename,salintoo_ename,o_salfromempwhereempno=p_empno;

exception

whenNO_DATA_FOUNDthen

o_ename:

='

NULL'

;

o_sal:

=-1;

endemp_lookup;

--定义两个变量

variablev_nonumber;

//等价于varv_nonumber;

variablenamevarchar2(10);

variablesalnumber;

execemp_lookup('

7160'

:

name,:

sal);

printname;

printsal;

--下面是PL/SQL程序块中调用

declare

l_enameemp.ename%type;

l_salemp.sal%type;

emp_lookup(7160,l_ename,l_sal);

dbms_output.put_line('

员工姓名:

||l_ename);

员工薪水'

||l_sal);

Rem5、创建带OUT参数的存储过程

newemp_lookup(p_empnonumber,

endnewemp_lookup;

CREATEORREPLACEPROCEDURE

test_proc(para1innumber,

para2outvarchar2,

para3inoutvarchar2)

AS

l_vartext1varchar2(60);

l_vartext2varchar2(70);

l_vartext1:

这是一个关于INOUT参数的例子!

l_vartext2:

这是一个关于OUT参数的例子!

IFPARA1=1THEN

PARA2:

=l_vartext2;

DBMS_OUTPUT.PUT_LINE(PARA2);

ELSE

PARA3:

=l_vartext1;

DBMS_OUTPUT.PUT_LINE(PARA3);

ENDIF;

END;

p1varchar2(60);

p2varchar2(70);

test_proc(2,p1,p2);

Rem6、创建程序包:

先建包规范,再建包主体。

REM=====================1、创建程序规范===============================

createorreplacepackagedept_emp_pakis

typerec_empisrecord(

deptnoemp.deptno%type,

enameemp.ename%type,

salemp.sal%type);

cursorcur_newemp(dept_nonumber)

returnrec_emp;

procedurepro_newemp(dept_nonumber);

enddept_emp_pak;

REM====================2、创建程序主体================================

createorreplacepackagebodydept_emp_pakis

returnrec_empis

selectdeptno,ename,salfromemp

wheredeptno=dept_no;

procedurepro_newemp(dept_nonumber)is

l_recemprec_emp;

--定义一个记录

begin

opencur_newemp(dept_no);

loop

fetchcur_newempintol_recemp;

exitwhencur_newemp%notfound;

DBMS_OUTPUT.PUT_LINE('

部门编号:

||l_recemp.deptno

||'

||l_recemp.ename

薪水:

||l_recemp.sal);

endloop;

closecur_newemp;

endpro_newemp;

如:

SQL>

createorreplacepackagepack_emp

2is

3procedurefind_empbyempno(v_empnot_emp.empno%type);

4endpack_emp;

5/

程序包已创建。

createorreplacepackagebodypack_emp

3procedurefind_empbyempno(v_empnot_emp.empno%type)

4is

5l_empt_emp%rowtype;

6begin

7select*intol_empfromt_empwhereempno=v_empno;

8dbms_output.put_line(l_emp.ename||'

||l_emp.sal);

9exceptionwhenno_data_foundthen

10dbms_output.put_line('

nodatafound!

!

11raise;

12endfind_empbyempno;

13endpack_emp;

14/

程序包体已创建。

execpack_emp.find_empbyempno(7788);

SCOTT3000

PL/SQL过程已成功完成。

综合案例:

--利用程序包,实现:

根据部门编号,查询所有的员工。

并统计该部门的总人数?

SQL>

createorreplacepackagepack_test

3cursorcur_emp(l_deptnot_emp.deptno%type)returnt_emp%rowtype;

4procedurefind_empbydeptno(v_deptnot_emp.deptno%type);

5procedurestatic_numbydeptno(v_deptnot_emp.deptno%type);

6functiongetEmpByEmpno(v_empnot_emp.empno%type)returnvarchar2;

7endpack_test;

8/

1createorreplacepackagebodypack_test

3cursorcur_emp(l_deptnot_emp.deptno%type)returnt_emp%rowtype

5select*fromt_empwheredeptno=l_deptno;

6procedurefind_empbydeptno(v_deptnot_emp.deptno%type)

7is

8l_empt_emp%rowtype;

9begin

10opencur_emp(v_deptno);

11loop

12fetchcur_empintol_emp;

13exitwhencur_emp%notfound;

14dbms_output.put_line(l_emp.ename||'

15endloop;

16closecur_emp;

17endfind_empbydeptno;

18procedurestatic_numbydeptno(v_deptnot_emp.deptno%type)

19is

20l_countnumber(4):

=0;

21begin

22selectcount(*)intol_countfromt_empwheredeptno=v_deptno;

23dbms_output.put_line(v_deptno||'

部门有'

||l_count||'

名员工'

24endstatic_numbydeptno;

25functiongetEmpByEmpno(v_empnot_emp.empno%type)returnvarchar2

26is

27l_msgvarchar2(200);

28begin

29selectename||'

isa'

||jobintol_msg

30fromt_emp

31whereempno=v_empno;

32returnl_msg;

33exceptionwhenno_data_foundthen

34dbms_output.put_line('

35raise;

36endgetEmpByEmpno;

37*endpack_test;

/

execpack_test.find_empbydeptno(20);

SMITH800

JONES2975

ADAMS1100

FORD3000

execpack_test.static_numbydeptno(20);

20部门有5名员工

selectpack_test.getEmpByEmpno(7788)fromdual;

PACK_TEST.GETEMPBYEMPNO(7788)

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

SCOTTisaANALYST

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1