####无参存过
create or replace procedure init_Income_EveMonth is
begin
-- Created on 2016/9/6 by YANGQC
--每月初始化薪资表
declare
cursor salesset is
select s.user_id, to_char(sysdate, 'yyyy-mm') month
from sys_salesman s
left join sys_user u on s.user_id = u.user_id
where u.status = 0
and not exists (select 1
from sys_income_main m
where m.month = to_char(sysdate, 'yyyy-mm')
and m.user_id = s.user_id);
salary Integer;
begin
for salesman in salesset loop
select nvl((select b.salary
from sys_income_basicsalay b
where b.user_id = salesman.user_id
and b.flag = 0),
0)
into salary
from dual;
insert into sys_income_main m
(m.id, USER_ID, month, BASIC_SALARY, ALLRESULT)
values
((select max(m1.id) + 1 from sys_income_main m1),
salesman.user_id,
salesman.month,
salary,
salary);
end loop;
commit;
end;
end init_Income_EveMonth;
上面是一个无参存过;
- 使用into给参数salary赋值,这个只适用于select语句查询出结果的情况;
- 存过格式如下:
create or replace procedure xxx
begin
end xxx;
####有参存过
create or replace procedure test_parameter(emp_name in varchar2, dept_no out number ) is
begin
dept_no:=2;
end test_parameter;
这个存过定义了输入和输出参数 测试该存过
-- Created on 2016/9/6 by YANGQC
declare
-- Local variables here
i integer:=20;
x varchar2(20);
begin
test_parameter(x,i);
dbms_output.put_line('After swap: x = ' || x || ',i= ' ||i);
end;
- 输出结果:After swap: x = ,i= 2 有参存过的输入和输出参数都不可缺少