Oracle创建存储过程、创建函数、创建包
发布日期:2021-06-28 19:49:03 浏览次数:2 分类:技术文章

本文共 2749 字,大约阅读时间需要 9 分钟。



一、Oracle创建存储过程

 1、基本语法

create orreplace procedure update_emp_sal

(Name in out type,
 Name
in out type, ...
)
is

begin

end update_emp_sal;

2、写一个简单的例子修改emp表的ename字段

createor replaceprocedure update_emp

(
v_empno varchar2,
v_ename
varchar2
)
is
begin

update empset ename=v_enamewhere empno=v_empno;

end update_emp;

调用方法如下:

SQL> exec update_emp('7935','test');

2、有返回值的存储过程

就写一个简单的返回empno=7935的sal值

create or replace procedure emp_out_sal

(
v_empno in varchar2,
v_sal out
number
)
is

vsal number(7,2);

begin
select sal into vsal from emp where empno=v_empno;
v_sal:=vsal;
end;

调用有返回值的过程

SQL> var vsal number

SQL> exec emp_out_sal('7935',:vsal);

或者

SQL> var vsal number

SQL> call emp_out_sal('7935',:vsal);

执行结果

vsal

---------
700

二、Oracle创建函数(function)

1、基本语法规则如下:

create or replace function (Name in type, Name in type, ...) return number is

Result number;
begin
return (Result);
end ;

2、写一个简单的查询例子查询出empno=7935的sal值

create or replace function ret_emp_sal(v_ename varchar2)

return number

is
v_sal
number(7,2);
begin
select nvl(sal,0) into v_sal from emp where lower(ename)=lower(v_ename);
return v_sal;
end;

调用此函数:

SQL   
>
var
vsla
number
SQL
>
call ret_emp_sal
(
'
7935
'
)
into
:vsal;
 
 

三、Oracle创建包

包用于组合逻辑相关的过程和函数,它由包规范和包体两个部分组成。包规范用于定义公用的常量、变量、过程和函数,

创建包规范可以使用CREATE PACKAGE命令,创建包体可以使用CREATE PACKAGE BODY

1、创建包规范

create package emp_pkg is

procedure emp_update_ename(v_empno varchar2,v_ename varchar2);

function emp_get_sal(v_empno varchar2) return number;
end;

2、创建包体

create or replace package body emp_pkg

is
procedure emp_update_ename
(
v_empno
varchar2,
v_ename
varchar2
)
is
vename
varchar2(32);
begin
update emp set ename=v_ename where empno=v_empno;
commit;
select ename into vename from emp where empno=v_empno;
dbms_output.put_line(
'雇员名称:'||vename);
end;
function emp_get_sal
(
v_empno
varchar2
)
return number is
vsal
number(7,2);
begin
select sal into vsal from emp where empno=v_empno;
return vsal;
end;
end;

在此提示,在没有创建包规范就创建包体,会失败,要使用包,必须先创建包规范,然后在创建包体

当要调用包的过程和函数时,在过程和函数的名称前加上包名作为前缀(包名.子程序名称),而如果要访问其他方案的包时需要在包的名称前加上方案的名称

(方案名称.包名.子程序名称)

实例:

SQL   
>
var
vsla
number
SQL
>
call emp_pkg.emp_get_sal(
'
7935
'
)
into
:vsal;Method calledvsal
--
-------
700
SQL
>
exec
emp_pkg.emp_update_ename(
'
7935
'
,
'
helong
'
);雇员名称:helongSQL
>
call emp_pkg.emp_update_ename(
'
7935
'
,
'
helong
'
);Method called
SQL
>
select
*
from
dual;
DUMMY
--
---
X雇员名称:helong




转载地址:https://blog.csdn.net/xxxcyzyy/article/details/46820209 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:10001---Spring--概述与Hello World
下一篇:Oracle中Union与Union All的区别(适用多个数据库)

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月17日 15时54分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章