PLSQL Oracle存储过程(实例分析)

 

1、结构

.spc是包头文件 .bdy是包体文件      spc是bdy的声明

spc文件实例:

不带返回值的


   PROCEDURE sp_gen_buylease_report
  (
     i_operator   IN pt.toper, 
     i_address    IN pt.taddress, 
     i_func_no    IN pt.tfuncno, 
     o_errcode    OUT pt.terrcode,
     o_errmsg     OUT pt.terrmsg 
   );

带返回值的


  FUNCTION fn_calc_discount_rate_bsflag
  (
    i_trade_date         IN pt.tsdate,         
    i_due_date           IN pt.tsdate,         
    i_contract           IN clear.tc_foreign_clear_price.contract_id%TYPE,
    i_bs_flag            IN clear.tc_foreign_discount_rate.bs_flag%TYPE,   
    o_errcode            OUT pt.terrcode,                        
    o_errmsg             OUT pt.terrmsg                    
  ) RETURN NUMBER;

出入参说明:

扩展:

tmp t_cursor_cur%ROWTYPE;    取的是一行数据的类型   其中t_cursor_cur是一个游标类型

2、中间值

以下是bdy的部分代码

  PROCEDURE sp_gen_foreign_inquire_posi
  (
    i_operator   IN pt.toper,          
    i_address    IN pt.taddress,        
    i_func_no    IN pt.tfuncno,         
    o_errcode    OUT pt.terrcode,                         
    o_errmsg     OUT pt.terrmsg                           
  ) IS
    v_cur_date pt.tsdate DEFAULT pki_pub.fn_cur_date;
    v_num pt.tint DEFAULT 0;

其中v_cur_date、v_num都是定义的中间值变量    其中default关键字是设置默认值的意思

3、游标

显示游标:打开游标进行select 这样游标的结果就是select的结果集

  OPEN o_cursor FOR
        SELECT exch_code,
               clear_date,
               client_id,
               member_id,
               contract_id,
               buy_open_qty,
               sell_open_qty, 
               buy_offset_qty
          FROM tc_extra_nomatch_posi
         ORDER BY exch_abbr, clear_date DESC;

隐式游标

隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql。DML语句包括:INSERT、UPDATE、DELETE

在PL/SQL中使用DML语句时自动创建隐式游标,隐式游标自动声明、打开和关闭,其名为 SQL,通过检查隐式游标的属性可以获得最近执行的 DML 语句的信息,隐式游标的属性有: %FOUND – SQL 语句影响了一行或多行时为 TRUE,%NOTFOUND – SQL 语句没有影响任何行时为TRUE,%ROWCOUNT – SQL 语句影响的行数,%ISOPEN - 游标是否打开,始终为FALSE

  UPDATE clear.tc_delivery_bond_manage
       SET qty          = nvl(TRIM(i_qty), qty),
           price        = nvl(TRIM(i_price), price),
     WHERE op_date = TRIM(i_op_date)
  
    IF SQL%ROWCOUNT <> 1 THEN
      o_errcode := -2;
      o_errmsg  := '更新失败,找不到指定记录';
      GOTO l_exit;
    END IF;

4、loop循环


   
   FOR v_cur IN (SELECT t.counterparty_no FROM clear.tc_counterparty_amt_limit t )
    LOOP
      clear.pkc_foreign_database_manage.sp_qry_counterparty_amt_limit(i_operator,
                                                                      i_address, 
                                                                      i_func_no, 
                                                                      v_cur.counterparty_no, 
                                                                      NULL, 
                                                                      pc.cn_cp_total, 
                                                                      '0',
                                                                      v_amt_limit, 
                                                                      o_errcode,
                                                                      o_errmsg 
                                                                      );
         
        FETCH v_amt_limit INTO 
              tmp_counterparty,
              tmp_cp_abbr,
              tmp_currency,
              tmp_trade_type,
              tmp_end_date,
              tmp_cp_name,
              tmp_limit_amt,
              tmp_used_amt,   
              tmp_overtime_amt,
              tmp_remain_at,
              tmp_creditHedging_amt,
              tmp_credit_amt, 
              tmp_creditedHedging_amt,
              tmp_credited_amt,
              tmp_pro_use,
              tmp_limit_amt_rate,
              tmp_replay_date,
              
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值