`

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;






分享到:
评论

相关推荐

    Oracle+PlSql存储过程

    6. 通过Hibernate调用Oracle存储过程,需要配置和编写映射元数据,以便ORM框架能够正确地调用和处理返回值。 7. 使用Java调用Oracle存储过程分为三种情况:无返回值的过程、有单个返回值的过程和返回列表的过程。 *...

    Oracle PlSql存储过程

    **关于Oracle存储过程的若干问题备忘** 1. **数据表别名**:在Oracle中,为表指定别名时不使用`AS`关键字,而是直接使用`table_name alias_name`。 2. **SELECT INTO**:在存储过程中,使用`SELECT`语句时,若要将...

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    本资料主要关注PLSQL编程以及在Oracle中创建和使用存储过程。 PL/SQL是Oracle特有的编程语言,它扩展了SQL的功能,允许开发者编写复杂的业务逻辑和控制流程。在PL/SQL中,你可以声明变量、定义过程和函数、处理异常...

    PLSQL中存储过程的建立,导出,导入,使用

    ### PL/SQL中存储过程的建立、导出、导入与使用 #### 一、存储过程的概念及优势 存储过程是一种数据库对象,它是由一系列SQL语句组成的预编译的程序块,存储在数据库中,可以通过调用的方式执行。在Oracle数据库中...

    练习利用PLSQL Developer编写和管理存储过程、存储函数和触发器等

    PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...

    Oracle_存储过程exception异常处理大全及实例经典最终.docx

    ### Oracle 存储过程 Exception 异常处理详解 #### 1. 异常处理概念 在 Oracle 存储过程中,异常处理是一项非常重要的技术,它能够帮助开发人员处理那些不可预见的情况,确保程序的健壮性和稳定性。异常处理主要...

    PLSQL调试存储过程

    在Oracle数据库环境中,PL/SQL(Procedural Language/Structured Query Language)是一种强大的编程语言,用于编写存储过程、函数、触发器等数据库对象。当我们遇到程序逻辑错误或期望深入理解代码执行流程时,就...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    ### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...

    Oracle9i客户端精简版与PLSQL工具

    Oracle9i客户端精简版与PLSQL工具是针对Oracle数据库管理的一种高效便捷的解决方案,尤其适合于对系统资源有限但需要进行Oracle数据库操作的环境。这个压缩包包含了Oracle客户端的精简版本,以及PL/SQL Developer...

    pl sql批量执行多个sql文件和存储过程

    对于Oracle数据库而言,PL/SQL是一种非常强大的工具,它不仅可以用于编写复杂的数据库应用程序,还能够方便地进行SQL脚本的批量执行以及存储过程的调用。本文将详细介绍如何使用PL/SQL Developer来实现这一功能。 #...

    Oracle PL SQL存储过程以及函数编

    Oracle PL/SQL是Oracle数据库系统中的一个强大工具,它结合了SQL的数据操作能力和...对于初学者,可以参考《Oracle PLSQL存储过程以及函数编写.pdf》和《本地规范实例详解.pdf》等资料,结合实际练习来巩固理论知识。

    存储过程(循环插入数据)

    在Oracle中,存储过程可以通过PL/SQL(Procedural Language extensions to SQL)语言编写。PL/SQL是一种面向对象的编程语言,它扩展了SQL的功能,允许我们创建自定义函数、过程、触发器等。当我们需要向表中大量插入...

    ORACLE-PLSQL及存储过程自学资料

    在本自学资料中,我们将深入探讨PL/SQL的基本概念、结构、流程控制、运算符与表达式、游标、异常处理、存储过程和函数、包以及触发器。 首先,PL/SQL的全称是Procedure Language & Structured Query Language,它是...

    oracle PLSQL

    Oracle PL/SQL是一种在Oracle数据库环境中进行数据库编程的语言,它结合了SQL的查询能力与过程化编程语言的特点,使得开发者可以编写复杂的业务逻辑和数据库操作。在这个“Oracle PL/SQL”主题中,我们将深入探讨这...

    PLSQL.rar_oracle_pl sql_plsql_plsql java_sql

    这份文档可能会以实例驱动的方式,逐步讲解如何在Oracle环境中编写和执行PLSQL代码,同时可能还会涉及如何将PLSQL与Java应用集成,例如使用CallableStatement来调用存储过程。 总的来说,这个压缩包“PLSQL.rar”是...

    oracle 定时任务,使用存储过程更新数据

    为了实现定时更新数据,我们需要编写一个存储过程,该过程包含必要的SQL更新语句。例如,以下是一个简单的示例: ```sql CREATE OR REPLACE PROCEDURE update_data AS BEGIN UPDATE your_table SET column = new_...

    Oracle数据库plsql客户端

    Oracle数据库PL/SQL Developer客户端是数据库管理员和开发人员常用的工具,它专为Oracle数据库系统设计,提供了便捷的界面来编写、测试和调试PL/SQL代码。这个工具的强大之处在于其全面的功能集,允许用户进行数据库...

    Oracle9i Program with PLSQL v1

    Oracle9i Program with PLSQL是Oracle公司为开发者提供的一份关于如何在Oracle9i数据库环境中...通过本教程,读者可以深入理解PLSQL的各种特性,掌握编写高效存储过程的方法,从而提升在Oracle数据库环境中的编程能力。

    Oracle12c客户端+plsql12

    - **PL/SQL单元测试**:可以编写PL/SQL测试包来验证存储过程和函数的正确性,提高了代码质量。 3. **安装和配置**:在安装Oracle 12c客户端和PL/SQL时,需要注意以下步骤: - **系统需求**:确保操作系统和硬件...

Global site tag (gtag.js) - Google Analytics