设为首页 加入收藏

TOP

PL-SQL存储函数和存储过程(二)
2014-11-23 17:45:34 来源: 作者: 【 】 浏览:69
Tags:PL-SQL 存储 函数 过程
型 return varchar2 is --PL/SQL块变量的声明 begin --函数体 return 'helloworld'|| v_logo; end;

3 创建一个存储函数,返回当前的系统时间

create or replace function func1
return date
is
--定义变量
v_date date;
begin
--函数体
--v_date := sysdate;
select sysdate into v_date from dual;
dbms_output.put_line('我是函数哦');

return v_date;
end;

执行法1:

select func1 from dual;


执行法2:

declare
v_date date;
begin
v_date := func1;
dbms_output.put_line(v_date);
end;


4. 定义带参数的函数: 两个数相加

create or replace function add_func(a number, b number)
return number
is
begin
return (a + b);
end;

执行函数

begin
dbms_output.put_line(add_func(12, 13));
end;


或者
select add_func(12,13) from dual;

5. 定义一个函数: 获取给定部门的工资总和, 要求:部门号定义为参数, 工资总额定义为返回值.

create or replace function sum_sal(dept_id number)
return number
is

cursor sal_cursor is select salary from employees where department_id = dept_id;
v_sum_sal number(8) := 0;
begin
for c in sal_cursor loop
v_sum_sal := v_sum_sal + c.salary;
end loop;

--dbms_output.put_line('sum salary: ' || v_sum_sal);
return v_sum_sal;
end;

执行函数

begin
dbms_output.put_line(sum_sal(80));
end;

6. 关于 OUT 型的参数: 因为函数只能有一个返回值, PL/SQL 程序可以通过 OUT 型的参数实现有多个返回值

要求: 定义一个函数: 获取给定部门的工资总和 和 该部门的员工总数(定义为 OUT 类型的参数).
要求: 部门号定义为参数, 工资总额定义为返回值.

create or replace function sum_sal(dept_id number, total_count out number)
return number
is

cursor sal_cursor is select salary from employees where department_id = dept_id;
v_sum_sal number(8) := 0;
begin
total_count := 0;

for c in sal_cursor loop
v_sum_sal := v_sum_sal + c.salary;
total_count := total_count + 1;
end loop;

--dbms_output.put_line('sum salary: ' || v_sum_sal);
return v_sum_sal;
end;

执行函数:

delare
v_total number(3) := 0;

begin
dbms_output.put_line(sum_sal(80, v_total));
dbms_output.put_line(v_total);
end;

7*. 定义一个存储过程: 获取给定部门的工资总和(通过 out 参数), 要求:部门号和工资总额定义为参数

create or replace procedure sum_sal_procedure(dept_id number, v_sum_sal out number)
is

cursor sal_cursor is select salary from employees where department_id = dept_id;
begin
v_sum_sal := 0;

for c in sal_cursor loop
--dbms_output.put_line(c.salary);
v_sum_sal := v_sum_sal + c.salary;
end loop;

dbms_output.put_line('sum salary: ' || v_sum_sal);
end;
[执行]
declare
v_sum_sal number(10) := 0;
begin
sum_sal_procedure(80,v_sum_sal);
end;

8*. 自定义一个存储过程完成以下操作:
对给定部门(作为输入参数)的员工进行加薪操作, 若其到公司的时间在 ( , 95) 期间, 为其加薪 %5
[95 , 98) %3
[98, ) %1
得到以下返回结果: 为此次加薪公司每月需要额外付出多少成本(定义一个 OUT 型的输出参数).

create or replace procedure add_sal_procedure(dept_id number, temp out number)

is

cursor sal_cursor is select employee_id id, hire_date hd, salary sal from employees where department_id = dept_id;
a number(4, 2) := 0;
begin
temp := 0;

for c in sal_cursor loop
a := 0;

if c.hd < to_date('1995-1-1', 'yyyy-mm-dd') then
a := 0.05;
elsif c.hd < to_date('1998-1-1', 'yyyy-mm-dd') then
a := 0.03;
else
a := 0.01;
end if;

temp := temp + c.sal * a;
update employees set salary = salary * (1 + a) where employee_id = c.id;
end loop;
end;

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇DB2查看执行计划 下一篇PL-SQL包的创建和应用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: