Oracle PL/SQL编程(1)


所用示例:

Employee

1编写一个过程,要求传入雇员名字和该雇员新的薪水,修改该雇员的薪水

2编写一个函数要求传入雇员的名字,得到该雇员的年薪

*******************************************************************************

Declare(可选)

/*定义部分*/

Begin 

/*执行的代码*/

Exception(可选)

/*异常处理过程*/

End;

/

 

declare 
v_empname varchar2(64):='wang222';--对变量赋值时符号为:=
v_newsalary number(8,2):=3659.2;
begin 
  update employee set salary=v_newsalary where empname=v_empname;
end;
/
declare 
v_empname varchar2(64):='wang222';
v_sumSalary number;
begin
  select salary*13 into v_sumSalary from employee where empname=v_empname;
  dbms_output.put_line('雇员的年薪为:'||v_sumSalary);/*要使这句话打在控制台上要 set serveroutput on;*/
end;
/


*******************************************************************************

存储过程

将块升级为一个存储过程

Create procedure 存储过程的名称(变量1  变量类型,变量2  变量类型)is

 

create procedure update_salary(in_v_empname in varchar2,in_v_newSalary in number) is
/*变量类型不可以带长度约束,varchar2(64)这样是错误的写法*/
/*in表示输入的变量,out表示输出的变量  默认为in */
begin 
  update employee set salary=in_v_newSalary where empname=in_v_empname;
end;
/

*******************************************************************************

函数

Create function 函数名称 (变量1 变量类型,变量2  变量类型)return 变量类型 is

/*定义的变量*/

Begin

/*执行过程*/

Return 变量;

End

/

 

create or replace function get_sum_salary(in_v_empname varchar2) return number is
v_sum_salary number;
begin
select salary*13 into v_sum_salary from employee where empname=in_v_empname;
return v_sum_salary;
end;
/

 

*******************************************************************************

首先要申明一个包

Create package 包名 is

Procedure 存储过程名称(变量1  变量类型,变量2  变量类型);

Function  函数名称(变量1  变量类型,变量2  变量类型)return 变量类型;

End;

/

 

create or replace package mypackage is
procedure update_salary (in_v_empname varchar2,in_v_newSalary number);
function get_sum_salary(in_v_empname varchar2) return number;
end;
/

然后开始创建包体

Create package body 包名 is

Procedure存储过程名称(变量1  变量类型,变量2  变量类型)is

/*定义的变量*/

Begin 

/*执行的过程*/

End

Function函数名称(变量1  变量类型,变量2  变量类型)return 变量类型 is

/*定义的变量*/

Begin

/*执行过程*/

Return 变量;

End

/

 

create  package body mypackage is
procedure update_salary(in_v_empname in varchar2,in_v_newSalary in number) is
begin 
  update employee set salary=in_v_newSalary where empname=in_v_empname;
end;
function get_sum_salary(in_v_empname varchar2) return number is
v_sum_salary number;
begin
select salary*13 into v_sum_salary from employee where empname=in_v_empname;
return v_sum_salary;
end;

end;
/

 

在调用包中的过程或者函数时要带上方案名和包名

完整的调用方法:

Exec 方案名.包名.过程名(变量1,变量2);

Call 方案名.包名.函数名(变量1,变量2);

例如:

Call scott.mypackage.get_sum_salary(‘wang222’);

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值