`

接触oracle存储过程

阅读更多

这是我写的第一个存储过程:

CREATE OR REPLACE PROCEDURE STATE_SALE(BOOK_ID   IN VARCHAR2,
                                       STORE_ID_IN  IN VARCHAR2,
                                       MAOLI_OUT   OUT NUMBER) IS
  SALED_NUM NUMBER; --出售量
  ONSALE_UP_TIME DATE; --图书上架时间
  INITIAL_NUM NUMBER; --上架库存数量
  FINAL_PRICE_UP NUMBER; --上架时的进价
  INTO_STOCK_PRICE NUMBER; --入库时的进价
  ROOM_STOCK_NUM NUMBER; --库存入库数
  ROOM_STOCK_TIME DATE; --库存入库时间
  FINAL_PRICE_V NUMBER; --最终交易价格
  IS_NUM NUMBER; --判断标记
  MY_NUM NUMBER; --暂时库存数
  MAOLI_RESULT NUMBER; --毛利和
  SALE_COST NUMBER; --销售成本
  SALE_EARNING NUMBER; --销售收入(实洋)

  BEGIN

SELECT TTT.ONSALE_TIME, TTT.PURCHASINGPRICE INTO ONSALE_UP_TIME, FINAL_PRICE_UP FROM TBL_STORE_BOOKINF TTT WHERE TTT.PK_BOOKINFO_ISBN_ID = BOOK_ID AND TTT.STORE_ID = STORE_ID_IN;
IF BOOK_ID IS NOT NULL THEN
SELECT COUNT(AA.BOUGHT_NUM), AA.FINAL_PRICE INTO SALED_NUM, FINAL_PRICE_V FROM TBL_ORDER_HISTORY_DTL AA WHERE AA.GOODS_ID = BOOK_ID GROUP BY AA.GOODS_ID,AA.FINAL_PRICE;
SELECT SM.INITIAL_NUM INTO INITIAL_NUM FROM TBL_STOCK_MANAGE SM WHERE SM.STORE_ID=STORE_ID_IN AND SM.PK_BOOK_ID=BOOK_ID;
END IF ;

  --获得销售收入(实洋)
SALE_EARNING := SALED_NUM * FINAL_PRICE_V;

  --如果上架时的库存已经能够满足出售量时
IF SALED_NUM < INITIAL_NUM THEN
  --计算毛利
SALE_COST := FINAL_PRICE_UP * SALED_NUM; MAOLI_RESULT := FINAL_PRICE_V * SALED_NUM - SALE_COST;
ELSE
--销售剩余数量差----销售数量-上架时的库存数
IS_NUM := SALED_NUM - INITIAL_NUM;
--如果库存数小于0

WHILE IS_NUM > 0 LOOP
BEGIN
SELECT TTTT.ENTER_STOCK_TIME 入库时间, TTTT.ENTER_STOCK_NUM 入库数, TTTT.INIT_PRICE 进价 INTO ROOM_STOCK_TIME, ROOM_STOCK_NUM, INTO_STOCK_PRICE FROM TBL_ENTER_STOCK TTTT WHERE TTTT.STORE_ID = STORE_ID_IN AND TTTT.Book_Id = BOOK_ID ORDER BY TTTT.ENTER_STOCK_TIME;
--库存入库数-   当前库存数量-
MY_NUM := ROOM_STOCK_NUM - IS_NUM;
--计算毛利
IF MY_NUM < 0 THEN
BEGIN
  --销售收入
SALE_COST := SALE_COST + INTO_STOCK_PRICE * ROOM_STOCK_NUM;
END; ELSE
--销售收入
SALE_COST := SALE_COST + INTO_STOCK_PRICE * ROOM_STOCK_NUM;

END IF; SALE_COST := SALE_COST + INTO_STOCK_PRICE * SALED_NUM;
END;
END LOOP;
END IF;
IF MAOLI_RESULT=NULL THEN
MAOLI_RESULT := SALE_EARNING - SALE_COST;
END IF;
MAOLI_OUT := MAOLI_RESULT; --把毛利结果赋值给毛利
END STATE_SALE;

 

因为项目的原因接触了存储过程,在我看来高深的存储过程终于自己也可以简单地学习了.

存储过程,用sq/plus还能进行数据测试:

写完存储过程后,就可以在图片pre.jsp附件中,右击可以进行测试,添加上测试数据就可以进行单步测试了.和eclipse测试一样.这样就可以测试你写的存储过程是否正确

 

 

在service层调用:

getHibernateTemplate().execute(new HibernateCallback()
  {
   @SuppressWarnings("deprecation")
   public Object doInHibernate(Session session)
     throws HibernateException, SQLException
   {
    CallableStatement cs = session.connection().prepareCall(
      "{call STATE_SALE(?,?,?)}");//不管是in参数还是out参数都要加?
    cs.setString(1, bookId);// 图书编号
    cs.setString(2, storeId);// 店铺ID
    //cs.registerOutParameter(3, Types.VARBINARY, "MAOLI_OUT");
    cs.registerOutParameter(3,Types.BIGINT);
    cs.execute();
    String testPrint =cs.getString(3);
    System.out.println(testPrint);
    // 毛利
    final Long maoli = Long.parseLong(testPrint);
    return maoli;
   }

  • 大小: 10.6 KB
分享到:
评论

相关推荐

    oracle存储过程学习资料

    Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许开发者编写一系列复杂的SQL和PL/SQL语句,形成可重用的代码块。这些代码块可以执行数据处理、事务控制、错误处理等多种任务,极大地提高了数据库应用...

    oracle存储过程实例

    在"oracle存储过程实例"中,初学者可能接触到的常见操作包括: 1. **创建存储过程**:学习如何定义存储过程,包括输入参数、输出参数和无参数的存储过程。 2. **使用游标**:理解游标的声明、打开、关闭、提取数据...

    在Oracle PL/SQL中游标声明中表名动态变化的方法

    /* 小弟刚刚接触ORACLE存储过程,有一个问题向各位同行求教,小弟写了一个存储过程,其目的是接收一个参数作为表名,然后查询该表中的全部记录的某一个字段的内容导入到另一个表中。 ( tabname in varchar ) is v_...

    wxh 《完全接触Oracle》源代码

    3. **PL/SQL编程**:Oracle的内置过程化语言,用于编写存储过程、函数、触发器等,是数据库开发的重要部分。 4. **数据库管理**:学习如何管理用户、权限、表空间、数据文件、控制文件等数据库对象。 5. **数据库...

    完全接触 Oracle(PDG)

    5. **PL/SQL编程**:Oracle的PL/SQL是一种过程化语言,用于编写存储过程、函数、触发器等。教程会教授如何编写和执行PL/SQL块,处理异常,以及使用游标进行循环操作。 6. **Oracle Developer**:Oracle Developer是...

    新手完全接触 Oracle

    对于新手来说,全面接触Oracle需要理解以下几个关键知识点: 1. **Oracle基础概念**:Oracle是一个支持SQL语言的数据存储和管理平台,由Oracle公司开发。它包括数据库服务器、客户端工具、开发工具和各种服务组件。...

    完全接触oracle(PDG)

    12. **PL/SQL编程**:Oracle的内置编程语言,用于创建存储过程、函数、触发器等数据库对象,增强数据库的功能和性能。 "完全接触Oracle(PDG)"可能涵盖了这些主题,并可能深入讲解每个主题的细节,包括实际操作、...

    存储过程的创建与调试

    Oracle存储过程的创建与调试,适合第一次接触存储过程的人员学习。

    实验六:使用PLSQL编写存储过程访问数据库.ppt

    在实验中,学习者会接触到Oracle存储过程的基本概念和语法。存储过程是一组预编译的SQL和PLSQL语句,可以被多次调用,提高了代码复用性和执行效率。Oracle提供了丰富的文档和资源来帮助开发者: - **Oracle® ...

    完全接触 Oracle

    4. **数据库架构**:理解Oracle的数据存储结构,如表空间、数据文件、控制文件、重做日志文件、回滚段等,以及逻辑结构如表、索引、视图、存储过程等。 5. **数据库管理**:包括用户权限管理、数据库备份恢复、性能...

    Oracle课程设计 Oracle项目实例 Oracle编程

    PL/SQL是Oracle特有的过程式语言,用于编写存储过程、函数和触发器,是实现业务逻辑和数据库交互的关键。 文档资源是学习过程中不可或缺的部分。它们可能包含了详细的步骤指南、代码示例、问题解决方案以及最佳实践...

    Oracle基础第三版 Oracle Essentials

    在Oracle中,SQL有其特有的扩展,如PL/SQL,这是一种过程化编程语言,允许用户编写存储过程、函数和触发器。学习SQL不仅可以帮助理解数据操作,还能提升数据库的管理和性能优化能力。 接着,本书会介绍Oracle的数据...

    【Oracle-RAC】Linux--Oracle-11g-R2-RAC-安装配置详细过程V3.0(图文并茂)

    根据提供的文档信息,本文将详细解析Oracle 11g R2 RAC(Real Application Clusters)在Linux环境下的安装配置...此外,对于初次接触Oracle RAC的读者来说,建议在测试环境中先进行练习,积累经验后再应用于生产环境。

    delphi7+ oracle

    3. 存储过程示例:展示了如何在Delphi中调用和编写Oracle存储过程。 4. 跟踪工具:可能是第三方工具,如SQL Profiler,用于记录和分析数据库的SQL执行情况,帮助优化性能。 综上所述,这个压缩包提供的内容涵盖了...

    oracle数据库课程设计

    然后是“PL/SQL编程”,这是Oracle特有的过程式语言,用于编写存储过程、函数和触发器,实现更复杂的业务逻辑。之后的“使用游标、存储过程和触发器”进一步深化了PL/SQL的应用,游标用于循环处理查询结果,存储过程...

    Oracle 10g 服务器在 Windows 上安装过程演示

    以下是一个详细的安装过程演示,旨在帮助初次接触 Oracle 的用户顺利完成安装。 1. **前言** 在开始安装前,确保你对数据库有一定的了解,并且准备好安装环境。安装文档应清晰、易懂,以便初学者快速上手。官方...

    oracle11g 学习实例脚本

    通过阅读这份笔记,你可以快速回顾和理解Oracle的核心概念,如表、视图、索引、存储过程、触发器等,以及如何使用SQL进行数据查询、插入、更新和删除。 "文档oracle练习"可能是一系列的练习题或教程,这些练习通常...

Global site tag (gtag.js) - Google Analytics