A:带参数的存储过程:
create or replace procedure 存储过程名(var_1 in varchar2 , var_2 in number , var_3 in date) is
定义变量1 变量类型 := 赋初值;
定义变量2 变量类型 := 赋初值;
begin
存储过程体。。。。
。。。。。。。。。。。。。
end 存储过程名 ;
例子:
create or replace procedure pro_test(var_1 in varchar2 , var_2 in number , var_3 in date) is
v1 number := 1;
v2 date := sysdate;(系统时间)
begin
存储过程体。。。。
。。。。。。。。。。。。。
end pro_test ;
B: 无参数的存储过程:
create or replace procedure 存储过程名 is
定义变量1 变量类型 := 赋初值;
定义变量2 变量类型 := 赋初值;
begin
存储过程体。。。。
。。。。。。。。。。。。。
end 存储过程名 ;
例子:
create or replace procedure pro_test is
v1 number := 1;
v2 date := sysdate;(系统时间)
begin
存储过程体。。。。
。。。。。。。。。。。。。
end pro_test ;
2。存储过程的游标:
在取得集合时,用存储过程的游标 Cursor 很重要。利用它可以遍历查询的结果集。
游标的定义、打开、使用和关闭:
Cursor cur_name is select *|某几列 from table_name where ... ;
open cur_name;
for cur_result in cur_name LOOP
begin
.............................................................
当使用游标中的字段时可以这样: cur_result.列名
end;
end LOOP;
close cur_name;
3。本需求生成的存储过程代码:
create or replace procedure update_merinfo_fee_rate is
Cursor cusor_1 is select * from pmmerinfo ; --取得商户表的游标,目的是遍历取得 商户号 和 费率
fee_rate float := 1.5; --定义费率变量,并赋初值
begin
open cusor_1;----打开游标
for cur_result in cusor_1 LOOP--遍历游标
begin--取得一个商户的费率,并修改订单信息表中的 手续费
fee_rate := to_number(cur_result.transfeerate);
update ofordertradea ab set ab.transfee = (ab.transamt*fee_rate) where ab.merchantid = cur_result.merchantid and ab.transtime >= to_char((sysdate-1) , 'yyyymmdd') and ab.transtime < to_char((sysdate) , 'yyyymmdd');
end;