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

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

大家好,我是讯享网,很高兴认识大家。

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, 
小讯
上一篇 2025-03-06 10:49
下一篇 2025-04-09 08:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/34063.html