create or replace procedure p_gift8_lottery(v_phone_number in varchar2,

v_tone_id in varchar2,

v_tone_code in varchar2,

v_tone_name in varchar2,

v_tone_type in number,

v_num out varchar2, --序列号

v_iswin out number, --是否中奖 0未中,1中奖

v_gift out number --几等奖。

) is

v_this_month varchar2(20); --本月时间

v_black_count number; --是否在黑名单中

v_gift_rate1 number; --一等奖数量

v_gift_rate2 number; --二等奖数量

v_gift_rate3 number; --三等奖数量

v_gift_rate4 number; --四等奖数量

v_gift_rate5 number; --五等奖数量

v_gift_rate4_dmax number; --四等奖每日上限数量

v_gift_rate5_dmax number; --五等奖每日上限数量

v_temp_count number;

v_temp_amount number;

v_temp_num number;

TYPE T_VARRAY IS VARRAY(2) OF NUMBER;

TYPE T_VARRAY_VARRAY IS VARRAY(21) OF T_VARRAY;

V_VAR T_VARRAY_VARRAY := T_VARRAY_VARRAY(T_VARRAY(1, 5),T_VARRAY(6, 10));--二维数组的使用

errno number; --异常编码

errterm varchar2(1000); --异常信息

begin

--本月时间

v_this_month := to_char(sysdate, 'yyyymm');

v_gift_rate1 := 1;

v_gift_rate2 := 3;

v_gift_rate3 := 15;

v_gift_rate4 := 60;

v_gift_rate5 := 600;

v_gift_rate4_dmax := 2; --4等奖每日限额

v_gift_rate5_dmax := 20; --5等奖每日限额

--  raise_application_error('-20002', 'you can not change the data !');--可以主动抛出异常

--为了控制中奖次数需要再建一个中奖信息统计表。

--如果中奖,修改中奖记录表

select ceil(dbms_random.value(0, 10000000)) ||

ceil(dbms_random.value(0, 8)) || ceil(dbms_random.value(0, 8))

|| ceil(dbms_random.value(0, 8)) into v_random_num from dual;--未中奖随机码

if v_gift = 1 then

select t.one into v_temp_count from t_rbt_gift9_result t for update;

if v_temp_count < v_gift_one then

update t_rbt_gift9_result t set t.one = (t.one + 1) where t.id = 1;

--1等奖随机码

select ceil(dbms_random.value(0, 10000000)) || '999' into v_random_num from dual;

else

v_gift := 0;

end if;

insert into t_rbt_gift9_info (ID,phone_number,gift,create_time,random_num)

values(seq_rbt_gift9_info.nextval,v_phone_number,v_gift,sysdate,v_random_num);

elsif v_gift = 2 then

......

end if;

commit;

exception

--异常处理

when others then

errno := sqlcode;

errterm := sqlerrm;

begin

rollback;

insert into T_RBT_JOB_LOGS

values

(SEQ_JOB_LOG.Nextval,

errno,

errterm,

'p_gift8_lottery',

sysdate);

v_gift := 0;--0等奖

v_result:='100003';

select ceil(dbms_random.value(0, 10000000)) ||

ceil(dbms_random.value(0, 8)) || ceil(dbms_random.value(0, 8))

|| ceil(dbms_random.value(0, 8)) into v_random_num from dual;--未中奖随机码

insert into t_rbt_gift9_info (ID,phone_number,gift,create_time,random_num)

values(seq_rbt_gift9_info.nextval,v_phone_number,v_gift,sysdate,v_random_num);

commit;

end;

end p_gift8_lottery;

declare

v_phone_number varchar2(20);

v_tone_id varchar2(20);

v_tone_code varchar2(20);

v_tone_name varchar2(20);

v_tone_type number;

v_num varchar2(20);--序列号

v_iswin number;--是否中奖 0未中,1中奖

v_gift number;--几等奖。

i number:=0;

begin

v_phone_number := '152800123123';

v_tone_id := '333';

v_tone_code:='421421';

v_tone_name:='aab';

v_tone_type :=3;

for i in 1..1000

loop

/*执行你的pro*/

p_gift8_lottery(v_phone_number,v_tone_id,v_tone_code,v_tone_name,v_tone_type,v_num,v_iswin,v_gift);

/*dbms_output.put_line('vnum: ' || v_num);

dbms_output.put_line('v_iswin: ' || v_iswin);

dbms_output.put_line('v_gift: ' || v_gift);

dbms_output.put_line('=============='|| i ||'============');*/

end loop;

end;

plsql测试oracle存储过程,oracle存储过程基本结构的编写与plsql测试执行相关推荐

  1. 分而治之_编写干净的测试–分而治之

    分而治之 好的单元测试应该仅出于一个原因而失败. 这意味着适当的单元测试仅测试一个逻辑概念. 如果我们要编写干净的测试,则必须识别那些逻辑概念,并且每个逻辑概念只编写一个测试用例. 这篇博客文章描述了 ...

  2. 编写干净的测试–分而治之

    好的单元测试应该仅出于一个原因而失败. 这意味着适当的单元测试仅测试一个逻辑概念. 如果我们要编写干净的测试,则必须识别这些逻辑概念,并且每个逻辑概念仅编写一个测试用例. 这篇博客文章描述了我们如何识 ...

  3. oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包

    认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...

  4. oracle 别名 存储过程_oracle 存储过程 别名

    阿里云如何打破Oracle迁移上云的壁垒 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲.Oracle是指"数据库管理系 ...

  5. Oracle PL/SQL 存储过程

    Oracle PL/SQL 存储过程 Oracle 简介: 是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系 ...

  6. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  7. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...

    C#连接Oracle数据库通过存储过程操作数据库 收藏 此文于2011-06-07被推荐到CSDN首页 此文于2011-06-08被推荐到CSDN首页 如何被推荐? 之前笔者一直用C#连接SQL Se ...

  8. oracle 存储同步,Oracle数据库知识——存储过程篇

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 存储过程是一组用于完成特定功能的SQL语句,该语句已编译并存储在数据库中.用户通过指定存储过程的名称并提供参数(如果 ...

  9. oracle收发邮件存储过程

    oracle收发邮件存储过程 2012-04-13 13:33:32|  分类: .NET |  标签: |字号大中小 订阅 CREATE OR REPLACE PROCEDURE PROC_SEND ...

最新文章

  1. 防止被算力“锁死”,人工智能进化急需革命性算法
  2. 【管理心得之一】不要用“可有可无”的事,挑战他人对这件事的原则和底线...
  3. Spring Boot Dubbo 应用启停源码分析
  4. 从12306信息泄露了解何为黑客撞库拖库洗库
  5. 第十届山东省ACM省赛题解
  6. 移动后端支持平台Parse将API由Ruby迁移到Go
  7. iphone黑屏转圈_iphone8一直在黑屏转圈
  8. 为你的网站加上SSL,可以使用HTTPS进行访问
  9. Delphi指针总结
  10. python 字典写入excel_Python向excel中写入数据的方法
  11. Ext2、Ext3、Ext4的区别
  12. 易语言linux支持多线程,详解易语言启动多线程
  13. oracle本地数据库登录之连接pdb数据库
  14. 费用分摊分配用法(KSU5/KSV5/KB21N/KB11N)
  15. 怎么制作QQ动态表情包,GIF出处是哪
  16. 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集
  17. 手机端获取用户详细地理位置(高德地图API)
  18. 剖析抖音快速涨粉的文案号,了解大佬运营技巧,学以致用
  19. Java项目:JSP在线学生选课管理系统
  20. 实现图的邻接矩阵和邻接表的存储

热门文章

  1. 安装eclipse时一直跳转JRE Missing页面
  2. 基于Opencv实现眼睛控制鼠标
  3. 怎样高效阅读一篇文献?
  4. 基于深度学习的特征提取和匹配方法介绍
  5. Luck Club-SDT 去中心化的游戏
  6. 深度解析 PouchContainer 的富容器技术
  7. 系统升级到10.13之后cocoapods安装失败问题解决办法
  8. 日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)
  9. iOS 多线程的四种技术方案
  10. 【原创】Chrome最新版(53-55)再次爆出BUG!