oracle存储过程总结

Oracle存储过程学习

存储过程创建语法:

       create or replace procedure 存储过程名(param1 in type,param2 out type)

as

cursor cur1 is
select area_code,cmcode ,sum(rmb_amt) /10000 reb_amt_sn,
       sum(used_amt)/1000 usd_amt_sn
from   bgd_area_cm_m-base_t
where ym>= vs_ym_sn_bg
and   ym<=vs_ym_sn_end
group by area_code,cmcode;
begin
for rec in cur1 Loop
updae user_t
 set rem_amt_code= rec.rem_ant_sn,used_amt_sn=rec.usd_amt_sn
 where area_code = rec.area_code
 and cmcode = rec.cmcode
 and yum=is_ym;
 end Loop

---------------------------------
--显示cursor的处理
declare
--声明cursor,创建和命名一个sql工作区
cursor cursor_name is
      select real_name from accont_hcz;
      v_realname varchar2(20);
begin
--打开cursor,执行sql语句产生的结果集
    open cursor_name;
--提取cursor,提取结果集中的记录
dbms_output.put_line(v_realname)
--关闭cursor
close cursor_name;
 ----------------
存储过程的创建语法
create or replace procedure 存储过程名(param1 in tyype.param2 out type)

as
变量1 类型 (值范围);
变量2 类型(值范围);

Begin
Select count(*) into 变量1 from 表A where 列名=param1
if(判断条件){
  Select 列名 into 变量2 from 表A where 列名=param1
  Dbms_output.putline('打印信息');
  elsif()then
  bems_output.put_line ('打字信息')
  Rase 异常名(no_data_found);
End if;
Exception
 when others then
 rollback;
End
}
注意事项
1,存储过程参数不能带取值范围,in表示传入,out表示输出
2,变量取值范围后面接分号
3,在判断语句前最好先用count(*)函数判断是否存在盖头按操作记录
4,用select 。。。into。。。给变量赋值
5,在代码中抛出异常用rase+异常名


-------------------------------------
Oracle存储过程的基本语法
1基本结构
Crate or Replace prceduref存储过程名字


参数1 IN NUMBER
参数2 IN NUMBER

)IS
变量1 INETER:=0;
变量2 DATE;
BEGIN

END存储过程名字
---------------------------------------------
2.select into statement
将查询出的结果存入变量中,可以同时将多个列存储多个变量中,必须有一条记录,
否则跑出异常(如果没有记录跑出NO_DaTA_FOUND)
例子:
BENGIN
Select col1,col2 into 变量1,变量2 FROM TYPESTruct where xxx;
exception
WHEN NO_DATA_FOUND THEN
  XXXX
  END;
3.IF判断
IF V_TEST = 1 LOOP
BENGIN
XXXX
END
END;
END LOOP;
5.变量赋值
V_Test :=123;


6.for in 使用cursor
...
IS
CURSOR cur IS SELCECT * FROM XXX
BEGIN
V_SUM:=cur_result.列名1+cur_result.列名2
end;
end LOOP
END;
----------------------------------------
带参数的cursor
cursor user(C_ID NUMBER)IS SELECT NAEM FROM USER WEHRE TYPEID = C_ID;
OPEN C_USER(变量值);
exit fetch C_user%notfound;

 do something
 end loop;
 close c_user;
------------------------------------------------------
                                   关于Oracle存储过程的问题备忘
1,在存储过程中,select摸一个字段时,后面必须紧跟关键字into,
如果select整个记录,利用游标就另当别论了。
例子:
select af.keynode into kn from app ap where ap.appid = aid and af.foudationid= fid--有into,正确编译。

select af.keynode from app ap where ap.appid = aid and af.foudationid= fid--没有into,不能正确编译。                  



后续:


































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值