`

oracle存储过程基本结构的编写与plsql测试执行

 
阅读更多

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;






分享到:
评论

相关推荐

    Oracle9i Program with PLSQL v1

    系统讲解oracle数据库中PLSQL的使用,存储过程的编写

    直接用oracle存储过程完成基于socket的通讯

    直接使用oracle 提供的库函数实现基于sokcet的短连接客户端通讯,无需再编写客户端程序进行通讯再调用存储过程。比较奇怪的应用,只因为系统改造中,原系统采用存储过程接口,而新系统客户端不改造,只改造服务段为 ...

    plsql编写示例

    plsql oracle 存储过程 示例 学习plsql的同学可以作为参考。

    Oracle_PLSQL语言基础

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...

    存储过程编写.txt

    存储过程编写

    Oracle9i Program with PLSQL v2

    系统讲解oracle数据库中PLSQL的使用,存储过程的编写

    PLSQL.rar_oracle_plsql

    数据库第四版第六次实验使用PLSQL编写存储过程访问数据库,基于oracle数据库的编写方法

    ORACLE中PLSQL的使用

    1.使用PL/SQL编写ORACLE存储过程(PROCEDURE) 2.在ORACLE中使用包(PACKAGE)

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g 第3章-熟悉数据库 什么是数据库 范式,设计关系型数据库的准则 绘制E-R图设计数据库 第4章-...

    PLSQLDeveloper下载

    因为PL/SQL允许混合SQL申明和过程结构,因此可以在将申明发送到甲骨文系统去执行之前使用PL/SQL区段和副程序来组合SQL申明,没有PL/SQL,甲骨文需要就每次处理SQL申明,在网络环境中,这将影响交通流量,而且增加...

    plsql导出数据到excel的三种方法

    plsql导出数据到excel常用的三种方法,(1)直接导出;(2)转换导出方式;(3)导出后转换格式;

    Oracle AWR报告深入分析

    2、由于分析 awr 生成存储过程工作量极大,此文档很多代码没有经过优化与完善只初 步对生成内容与 awr 报表对比正确。 3、此文档的 sql 语句 98%以上是根据源码解析而成,非 oracle 源码 sql 4、建议有兴趣的同学去...

    sybasetoad

    12,另外支持数据表,存储过程,数据管道(可以支持不同的数据库之间相同表结构的数据进行传输)等功能,表结构修改,增加索引主键等,修改保存存储过程。 最后,该软件是我自己编写的,很小,打开速度快,支持两...

    PLSQL804比以前的版本又好一些

    • 使用文本编辑器编写程序单元(过程、触发器等)。 • 使用 Oracle SQL*Plus 编译源文件。 • 如果有编译错误,你必须找出它位于源文件中何处,纠正它,并转回到 SQL*Plus 重新编译它,然后再找下一处错误。 •...

    SybaseToad:小巧的oracle数据库查询修改工具

    新增功能:支持informix、增加export table界面、增加存储过程执行界面、增加存储过程重编译、增加表对象的触发器修改查看。修改bug若干。 功能类似toad或plsql: 1,支持语法高亮,显示表提示,类似plsql。 2,能...

    PLSQL Developer 7.0中文使用教程

    可以很方便的连接Oracle数据库,编写、调试sql脚本、存储过程等

    PLSQL803破解汉化补丁

    PL/SQL Developer 是一个为 Oracle 数据库开发存储程序单元的集成开发环境(IDE),使用 PL/SQL Developer,你能方便地创建你的客户端/服务器应用程序的服务器部分。 到目前为止,从最差处想,你还可以完成如下工作: ...

    PLSQL Developer 10.0.4.1708〖附中文补丁和注册机〗

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    plsqldev803 1/2

    PL/SQL Developer 是一个为 Oracle 数据库开发存储程序单元的集成开发环境(IDE),使用 PL/SQL Developer,你能方便地创建你的客户端/服务器应用程序的服务器部分。 到目前为止,从最差处想,你还可以完成如下工作: ...

    关于在PLSQL中实现DEBUG调试功能的方法

    举个例子,Oracle EBS标准功能的PLSQL(特别是API),如果Oracle没有自带调试功能给我们做看每一步骤的调试结果,单单通过看代码模拟其执行逻辑来找问题,基本上是不可能处理问题的! 当然,我们编写的代码,实际上...

Global site tag (gtag.js) - Google Analytics