所用示例:
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’);