概述
Oracle存储过程基本语法 存储过程
CREATE OR REPLACE PROCEDURE 存储过程名
IS
BEGIN
NULL;
END;
其中的is表示的后面将跟随一个pl/sql体,begin标识sql方法的开始。
%ROWTYPE用来声明一个和表中记录一样的record,一个记录声明为具有相同类型的数据库行的作法;
如:t_emp emp%rowtype ;
%TYPE用来声明一个变量和指定表的column一样的数据类型
如: t_name emp.name%type;
可以理解为rowtype表示的是一行数据,而type表示的只是一行数据中的一列数据(单个),那就是一个变量了,而rowtype就是很多个type合并到一起;
存储过程的示例:
create or replace procedure pro_test (retCode out number, retMsg out varchar2)
is
vcrm v_prod_inst%ROWTYPE;
TYPE ref_cursor_type IS REF CURSOR;
use_cursor ref_cursor_type;
vunit recharge.unit%TYPE;
vsummoney recharge.recharge_money%TYPE;
vsumlen flow_detail.length%TYPE;
vsumflow flow_detail.sum_flow%TYPE;
vsumd acct_book.init_value%TYPE;
vonline prod_use_daily.is_online%TYPE;
BEGIN
retCode := 0;
retMsg := ‘操作成功’;
vonline := 0;
–获取号码
open use_cursor for select * from v_prod_inst t where t.prod_status !=‘D’ and t.customer_status!=‘D’;
loop
fetch use_cursor into vcrm ;
EXIT WHEN use_cursor%NOTFOUND;
select min(UNIT),nvl(sum(RECHARGE_MONEY),0) into vunit, vsummoney from recharge where RECHARGE_STATUS=‘S’ and STATUS=‘E’ and ACC_NBR=vcrm.accnbr and to_char(CREATE_TIME,‘YYYY-MM-DD’)= to_char(sysdate-1,‘YYYY-MM-DD’) ;
select nvl(sum(LENGTH),0) ,nvl(sum(SUM_FLOW),0) into vsumlen,vsumflow from flow_detail where STATUS=‘E’ and ACC_NBR=vcrm.accnbr and FLOW_DATE=to_char(sysdate-1,‘YYYY-MM-DD’) ;
select nvl(sum(INIT_VALUE),0) into vsumd from acct_book c,account a ,sub_account b where to_char(c.create_time,‘YYYY-MM_DD’)=to_char(sysdate-1,‘YYYY-MM_DD’) and a.acc_nbr=vcrm.accnbr and c.ACCT_BOOK_TYPE_ID in (7, 8, 9, 10, 11, 12) and a.id=b.acct_id and a.status= ‘E’ and b.status=‘E’ and c.SUB_ACCT_ID=b.id and c.ACCT_ID=a.id and c.STATUS = ‘E’ and c.BUSI_STATUS != ‘O’;
if (vsumlen>0 or vsumflow>0) then
vonline := 1;
end if;
if (vsummoney>0 or vsumlen>0 or vsumflow>0 or vsumd>0) then
insert into prod_use_daily (id, use_date, acc_nbr, prod_inst_id, region_code,recharge_money, money_unit,flow_unit, flow_total, flow_time, buy_flow_total, is_online, status, create_time) values
(S_prod_use_daily.Nextval,to_char(sysdate,‘YYYYMMDD’),vcrm.accnbr,vcrm.id,vcrm.REGION_CODE,vsummoney,vunit,‘B’,vsumflow,vsumlen,vsumd,vonline,‘E’,sysdate);
end if;
end loop;
close use_cursor;
commit;
exception
when others then rollback;
retCode := -1;
retMsg := sqlerrm;
end pro_test;
最后
以上就是任性服饰为你收集整理的Oracle存储过程基本语法的全部内容,希望文章能够帮你解决Oracle存储过程基本语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复