oracle 包的存储过程,Oracle 存储过程和包的使用

/*****************************存储过程****************

子程序:存储过程与函数

存储过程的语法:

create [or replace] procedure 存储过程的名称[(参数列表)]

is|as

本地变量声明

begin

---存储过程执行语句;

end [存储过程的名称];

针对参数的类型有三种:

in  --输入参数(默认)

out ---输出参数

in out

******************************************/

------为员工编号为7369员工工资加10%

create or replace procedure pro_updateSal

is

begin

update emp set sal=sal*1.1 where empno=7369;

dbms_output.put_line('update!!');

end;

---调用存储过程

--1.在PL/SQL块中调用

begin

pro_updateSal();

end;

--2.使用 call--(只能调用无参数的存储过程)

call pro_updateSal();

--测试

select * from emp where empno=7369;

---3.在SQL/PLUS命令行中调用 execute

----根据输入员工编号,为对应员工加工资10%

create or replace procedure pro_updateSal(myempno in emp.empno%type)

is

begin

update emp set sal=sal*1.1 where empno=myempno;

dbms_output.put_line('update!!');

end;

---调用

declare

inputempno emp.empno%type;

begin

inputempno := &请输入编号;

pro_updateSal(inputempno);

end;

---根据输入的员工编号,获得员工的姓名

create or replace procedure pro_getEmpName(myempno in emp.empno%type,

myename out emp.ename%type)

is

begin

select ename into myename from emp where empno=myempno;

dbms_output.put_line('获得成功');

end;

--调用

declare

inputempno emp.empno%type;

----与sqlserver不需要使用out关键字来声明out类型的参数

myname emp.ename%type;

begin

inputempno := &请输入员工编号;

pro_getEmpName(inputempno,myname);

dbms_output.put_line('姓名:'||myname);

exception

when no_data_found

then dbms_output.put_line('输入员工编号错误或没有此数据');

end;

/***********************

存储过程的定义

create [or replace] procedure [(参数列表)]

is | as

[局部变量声明]

begin

可执行语句

exception

异常处理语句

end [];

**************************/

create or replace procedure updateSal(theno emp.empno%type,percent number)

is

cursor updateEmp(theEmpno emp.empno%type) is

select * from emp where empno=theempno for update;

updateRow emp%rowtype;

begin

open updateEmp(theno);

fetch updateEmp into updateRow;

update emp set sal = sal*(1+percent) where current of updateEmp;

dbms_output.put_line('数据修改完成');

close updateEmp;

end;

select empno,ename,sal from emp where empno=7369;

begin

updateSal(7369,0.2);

end;

--带参数的存储过程

create or replace procedure updateSal(theempno number,thesal in out number)

is

thejob emp.job%type;

tempsal emp.sal%type;

begin

select job,sal into thejob,tempsal from emp where empno = theempno;

if thejob = 'MANAGER' then

thesal := thesal*1.2;

end if;

update emp set sal = thesal where empno = theempno;

end;

declare

thesal emp.sal%type;

begin

thesal := 3000;

updateSal(7698,thesal);

dbms_output.put_line(thesal);

end;

/***********************************

函数的定义

create [or replace]  function 函数名称

[(参数 [ { in | out | in out } ]   类型, ……

(参数 [ { in | out | in out } ]   类型 )]

return 返回类型 { is | as }

函数的执行语句

************************************/

create or replace function myadd(a int,b int)

return int

as

begin

return a + b;

end;

--在PL/SQL中调用必须要有一个参数接受函数的返回值 declare   result int := 100; begin   result := myadd(32,16);   dbms_output.put_line('结果是:'||result); end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值