oracle 中创建存储过程包括包和包体,包中可以定义全局变量以及过程名字及参数;
包(package):
create or replace package REP_GSCF is
-- Author : XSJ
-- Created : 2011-10-25 15:01:16
-- Purpose :
-- Public type declarations
--type <TypeName> is <Datatype>;
vsql varchar2(4000);
-- Public constant declarations
--<ConstantName> constant <Datatype> := <Value>;
-- Public variable declarations
--<VariableName> <Datatype>;
-- Public function and procedure declarations
--function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;
procedure repReminderFeeNotice(
dayBeginVal_i in varchar2, --催费天数起始
dayEndVal_i in varchar2, --催费天数结束
readTypeVal_i in varchar2, --抄表类型
readVal_i in varchar2, --抄表类型值
rslt_o out varchar2, --字符串结果
rs_o out together.T_cursor --数据集(单独定义包中的 游标返回形式)
);
procedure generateData(
GENDATE_I in varchar2, --生成日期 字符 非空 YYYY-MM-DD格式
oweDays_I in varchar2, --欠费天数 数字 非空
RESULT_O out varchar2 --字符串结果
);
end REP_GSCF;
包体(package body):
create or replace
package body REP_GSCF is
procedure repReminderFeeNotice(
dayBeginVal_i in varchar2, --催费天数起始
dayEndVal_i in varchar2, --催费天数结束
readTypeVal_i in varchar2, --抄表类型
readVal_i in varchar2, --抄表类型值
rslt_o out varchar2, --字符串结果
rs_o out together.T_cursor --数据集
) is
--定义变量
vs_param1 VARCHAR2(10); --催费天数起始
vs_param2 VARCHAR2(10); --催费天数结束
vs_param3 CHAR(1); --抄表类型
vs_param4 VARCHAR2(1000); --抄表类型值
--定义游标(一个可以遍历的结果集)
cursor get_list is select to_char(sysdate,'yyyymmdd')||'-'||bookno||'-'||to_char(bookorder) ord,custname,billmonth,ltrim(to_char(fee,'99999990.00'),' ') fee,to_char(deadline,'yyyy-mm-dd') ddline from cms_bill where ispaid = '00' and custName = '南京二楼湾商务咨询有限公司';
begin
--用输入参数给变量赋初值
vs_param1 := dayBeginVal_i;
vs_param2 := dayEndVal_i;
vs_param3 := readTypeVal_i;
vs_param4 := readVal_i;
DBMS_OUTPUT.put_line('===='||vs_param1);
DBMS_OUTPUT.put_line('===='||vs_param2);
DBMS_OUTPUT.put_line('===='||vs_param3);
DBMS_OUTPUT.put_line('===='||vs_param4);
open get_list;
close get_list;
vsql:='select to_char(sysdate,''yyyymmdd'')||''-''||bookno||''-''||to_char(bookorder) ord,custname,billmonth,ltrim(to_char(fee,''99999990.00''),'' '') fee,to_char(deadline,''yyyy-mm-dd'') ddline from cms_bill where ispaid = ''00''';
together.get_rs(vsql,rs_o);
rslt_o:='success';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
vsql:='select to_char(sysdate,''yyyymmdd'')||''-''||bookno||''-''||to_char(bookorder) ord,custname,billmonth,ltrim(to_char(fee,''99999990.00''),'' '') fee,to_char(deadline,''yyyy-mm-dd'') ddline from cms_bill where ispaid = ''00''';
together.get_rs(vsql,rs_o);
rslt_o:='failure';
end;
procedure generateData(
GENDATE_I in varchar2, --生成日期 字符 非空 YYYY-MM-DD格式
oweDays_I in varchar2, --欠费天数 数字 非空
RESULT_O out varchar2 --字符串结果
)is
--定义变量
GENDATE VARCHAR2(10); --生成日期
days number(3,0); --天数
begin
-- --用输入参数给变量赋初值
GENDATE := GENDATE_I;
days := oweDays_I;
DBMS_OUTPUT.put_line('===='||GENDATE);
DBMS_OUTPUT.put_line('===='||days);
--open get_list;
--close get_list;
--vsql:='select to_char(sysdate,''yyyymmdd'')||''-''||bookno||''-''||to_char(bookorder) ord,custname,billmonth,ltrim(to_char(fee,''99999990.00''),'' '') fee,to_char(deadline,''yyyy-mm-dd'') ddline from cms_bill where ispaid = ''00''';
--together.get_rs(vsql,rs_o);
RESULT_O:='success';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
--vsql:='select to_char(sysdate,''yyyymmdd'')||''-''||bookno||''-''||to_char(bookorder) ord,custname,billmonth,ltrim(to_char(fee,''99999990.00''),'' '') fee,to_char(deadline,''yyyy-mm-dd'') ddline from cms_bill where ispaid = ''00''';
--together.get_rs(vsql,rs_o);
RESULT_O:='failure';
end;
end REP_GSCF;