`
terryfeng
  • 浏览: 507239 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个Oracle存储过程示例

阅读更多
下面是一个用于计算,每个月从4月起各个月的记录条数统计,直到当前月
 
1.打开PLSQL,新建一个存储过程,点击菜单文件|新建|程序窗口|过程,在弹出的对话框中输入存储过程名字,确定
image 
复制下面的代码到编辑器,运行
 
create or replace procedure PCREPORT is

  startDate  DATE; --起始如期
  nowTime    DATE; --当前日期
  nowTime2   DATE; --当前日期下限用于支持跨年
  orderDate  DATE; --计算时候的当前下订单日期
  orderDate2 DATE; --跨年使用的日期范围下限

  returns          number; --退订总数
  renew            number; --续费总数
  active           number; --激活人数
  noActive         number; --未激活人数
  activeReturn     number; --激活退订人数
  noActiveReturn   number; --未激活退订人数
  reportDateActive number; --报表时间激活的人数

  tempStr      varchar2(3000);
  i            number;
  number_value number;

  --1.起始时间与当前时间减法,用结果做循环遍历的次数
  --2.每次遍历在起始时间上加,遍历次数的月值
  --3.将这个时间值作为条件,查询统计出一个统计值,将这个值插入到数据库对应的字段

begin
  startDate := to_date('2009-04-01', 'yyyy-mm-dd');

  /*  SELECT to_char(sysdate, 'yyyy-mm-dd ') into tempStr from dual;
  nowTime      := to_date(tempStr, 'yyyy-mm-dd');*/

  select to_date(to_char(sysdate, 'YYYYMM') || '01', 'YYYY-MM-DD')
    into nowTime
    from dual;

  nowTime2 := add_months(nowTime, 1);

  number_value := months_between(nowTime, startDate); --月份差

  i := 0;
  for i in 0 .. number_value loop
  
    orderDate  := add_months(startDate, i);
    orderDate2 := add_months(orderDate, 1);
  
    -- 续费及激活总数的计算
    select count(*)
      into renew
      from ord_order
     where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = 
       and (end_time = to_date('1900-01-01', 'yyyy-mm-dd') or
           end_time >= nowTime); --(select to_char(end_time, 'mm') from dual) >= '07');
  
    --续费用户退订总人数
    select count(*)
      into returns
      from ord_order
     where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '05'
       and end_time between nowTime and nowTime2; --(select to_char(end_time, 'mm') from dual) = '07';
  
    --续费用户激活未退订
    select count(*)
      into noActiveReturn
      from ord_order
     where AGREE_TO_TIME between orderDate and orderDate2 -- (select to_char(AGREE_TO_TIME, 'mm') from dual) = '06'
       and end_time between nowTime and nowTime2 --(select to_char(end_time, 'mm') from dual) = '07'
       and BECOME_EFFECTIVE_TIME < nowTime --to_date('2009-07-01', 'yyyy-mm-dd')
       and BECOME_EFFECTIVE_TIME = to_date('1900-01-01', 'yyyy-mm-dd');
  
    -- 当前报表月在个月激活的人数
    select count(*)
      into reportDateActive
      from ord_order
     where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '05'
       and (end_time = to_date('1900-01-01', 'yyyy-mm-dd') or
           end_time >= nowTime) --(select to_char(end_time, 'mm') from dual) >= '06')
       and BECOME_EFFECTIVE_TIME between nowTime and nowTime2; --(select to_char(BECOME_EFFECTIVE_TIME, 'mm') from dual) = '06';
  
    -----------------------------之前经过校验得到正确结果---------------------
    --续费用户报表月激活人数
    select count(*)
      into active
      from ord_order
     where AGREE_TO_TIME between orderDate and orderDate2  --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '04'
       and BECOME_EFFECTIVE_TIME != to_date('1900-01-01', 'yyyy-mm-dd')
       and BECOME_EFFECTIVE_TIME < nowTime     --(select to_char(BECOME_EFFECTIVE_TIME, 'mm') from dual) < '07'
       and ((end_time = to_date('1900-01-01', 'yyyy-mm-dd')) or
             end_time >= nowTime);                       --(select to_char(end_time, 'mm') from dual) >= '07');
  
    activeReturn := returns - noActiveReturn;
  
    noActive := renew - active - reportDateActive;
  
    --做插入操作
    insert into report_pc51
      (REPORTDATE,
       ORDERDATE,
       RENEW,
       RETURNS,
       NOACTIVERETURN,
       REPORTDATEACTIVE,
       ACTIVERETURN,
       ACTIVE,
       NOACTIVE)
    values
      (nowTime,
       orderDate,
       renew,
       returns,
       noActiveReturn,
       reportDateActive,
       activeReturn,
       active,
       noActive);
  
    dbms_output.put_line(i);
  end loop;

  COMMIT;

end PCREPORT;
分享到:
评论

相关推荐

    oracle 存储过程示例

    oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例oracle 存储过程示例

    oracle存储过程示例

    这是一个简单的oracle代码,可进行参考

    oracle的一个简单存储过程实例

    这些文件通常用于创建存储过程,每个文件可能包含一个或多个过程。例如,`c.sql`可能包含了创建某个特定业务逻辑的存储过程,而`b.sql`可能处理另一组操作,如数据更新或查询。`student.sql`可能与学生管理相关的...

    Python使用cx_Oracle调用Oracle存储过程的方法示例

    本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...

    oracle存储过程解锁

    以下是对“oracle存储过程解锁”这一主题的深入解析。 ### 标题:“oracle存储过程解锁” #### 解析: 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL代码块,用于执行复杂的业务逻辑或数据处理...

    oracle存储过程学习经典(实例)

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列的SQL和PL/SQL语句,形成一个可重用的代码块。这个"Oracle存储过程学习经典(实例)"资源显然是为初学者设计的,旨在帮助他们掌握如何...

    oracle存储过程-帮助文档

    `oracle procedure.chm`是一个帮助文件,通常包含详细的参考信息、示例和教程,供用户学习和查询Oracle存储过程的用法。CHM(Compiled HTML Help)格式是一种微软提供的离线帮助文档格式,用户可以通过搜索和导航来...

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

    oracle 存储过程 函数 dblink

    根据提供的部分代码示例,我们可以看到一个简单的存储过程`TESTA`被创建: ```sql CREATE OR REPLACE PROCEDURE TESTA( PARA1 IN VARCHAR2, PARA2 IN VARCHAR2 ) AS BEGIN INSERT INTO HYQ.B_ID (I_ID, I_NAME) ...

    oracle 存储过程批量提交

    以下是一个典型的示例代码段: ```sql DECLARE i INTEGER; BEGIN FOR v_Opr IN ( -- 查询或获取需要更新的数据集 SELECT * FROM your_table ) LOOP i := 0; FOR v_Cur IN ( -- 再次查询或获取数据子集 ...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    接下来,我们创建了一个名为 TESTPACKAGE 的包,包中包含了一个名为 TESTC 的存储过程。存储过程 TESTC 有一个输出参数,类型为游标类型。我们使用 CALLABLESTATEMENT 来调用存储过程,获取游标类型参数的值,并将其...

    hibernate query调用oracle存储过程

    以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....

    ORACLE存储过程最全教程

    Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...

    Oracle存储过程基本语法及示例

    ### Oracle存储过程基本语法及示例 在Oracle数据库中,存储过程是一种强大的工具,用于封装一组SQL语句或PL/SQL代码块,以便在数据库服务器上执行特定的任务。存储过程可以提高应用程序性能、确保数据完整性并简化...

    springboot整合mybatis调用oracle存储过程

    在Oracle数据库中,创建一个示例存储过程,如: ```sql CREATE OR REPLACE PROCEDURE get_users_by_cursor (cursor OUT SYS_REFCURSOR) AS BEGIN OPEN cursor FOR SELECT * FROM users; END; / ``` 这个存储过程...

    oracle 事务 回滚 存储过程

    ### Oracle存储过程 存储过程是在数据库中预编译的一组SQL语句,用于执行复杂的业务逻辑或数据操作。它们可以接受输入参数,执行一系列数据库操作,并返回结果。在Oracle中,存储过程使用PL/SQL编写,可以在数据库...

    ORACLE存储过程学习源码

    这个"ORACLE存储过程学习源码"集合包含了从基础到高级的30个示例,是学习和掌握Oracle存储过程的理想资源。下面,我们将深入探讨存储过程的基本概念、结构、类型,以及如何通过这些源码进行学习。 1. **存储过程的...

    最权威的Orcale存储过程示例

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户可以按需调用。存储过程大大提升了数据库应用的性能和安全性,同时也降低了应用程序与...

    Oracle 存储过程学习文档

    以上内容详细介绍了Oracle存储过程的相关知识点,包括其概念、优点、创建和调用方法、存储函数、包的概念及其使用示例。通过这些知识点的学习,可以更好地理解和掌握Oracle存储过程的应用技巧,从而提高数据库应用...

    润乾报表调用oracle存储过程案例说明

    以下是一个简单的存储过程示例,名为`TEST`,它接收两个输入参数`arg1`和`arg2`,并返回一个sys_refcursor类型的输出参数`v_out_result`: ```sql CREATE OR REPLACE PROCEDURE TEST (arg1 IN VARCHAR2, arg2 IN ...

Global site tag (gtag.js) - Google Analytics