这是我写的第一个存储过程:
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中的一个重要特性,它允许开发者编写一系列复杂的SQL和PL/SQL语句,形成可重用的代码块。这些代码块可以执行数据处理、事务控制、错误处理等多种任务,极大地提高了数据库应用...
在"oracle存储过程实例"中,初学者可能接触到的常见操作包括: 1. **创建存储过程**:学习如何定义存储过程,包括输入参数、输出参数和无参数的存储过程。 2. **使用游标**:理解游标的声明、打开、关闭、提取数据...
/* 小弟刚刚接触ORACLE存储过程,有一个问题向各位同行求教,小弟写了一个存储过程,其目的是接收一个参数作为表名,然后查询该表中的全部记录的某一个字段的内容导入到另一个表中。 ( tabname in varchar ) is v_...
3. **PL/SQL编程**:Oracle的内置过程化语言,用于编写存储过程、函数、触发器等,是数据库开发的重要部分。 4. **数据库管理**:学习如何管理用户、权限、表空间、数据文件、控制文件等数据库对象。 5. **数据库...
5. **PL/SQL编程**:Oracle的PL/SQL是一种过程化语言,用于编写存储过程、函数、触发器等。教程会教授如何编写和执行PL/SQL块,处理异常,以及使用游标进行循环操作。 6. **Oracle Developer**:Oracle Developer是...
对于新手来说,全面接触Oracle需要理解以下几个关键知识点: 1. **Oracle基础概念**:Oracle是一个支持SQL语言的数据存储和管理平台,由Oracle公司开发。它包括数据库服务器、客户端工具、开发工具和各种服务组件。...
12. **PL/SQL编程**:Oracle的内置编程语言,用于创建存储过程、函数、触发器等数据库对象,增强数据库的功能和性能。 "完全接触Oracle(PDG)"可能涵盖了这些主题,并可能深入讲解每个主题的细节,包括实际操作、...
Oracle存储过程的创建与调试,适合第一次接触存储过程的人员学习。
在实验中,学习者会接触到Oracle存储过程的基本概念和语法。存储过程是一组预编译的SQL和PLSQL语句,可以被多次调用,提高了代码复用性和执行效率。Oracle提供了丰富的文档和资源来帮助开发者: - **Oracle® ...
4. **数据库架构**:理解Oracle的数据存储结构,如表空间、数据文件、控制文件、重做日志文件、回滚段等,以及逻辑结构如表、索引、视图、存储过程等。 5. **数据库管理**:包括用户权限管理、数据库备份恢复、性能...
PL/SQL是Oracle特有的过程式语言,用于编写存储过程、函数和触发器,是实现业务逻辑和数据库交互的关键。 文档资源是学习过程中不可或缺的部分。它们可能包含了详细的步骤指南、代码示例、问题解决方案以及最佳实践...
在Oracle中,SQL有其特有的扩展,如PL/SQL,这是一种过程化编程语言,允许用户编写存储过程、函数和触发器。学习SQL不仅可以帮助理解数据操作,还能提升数据库的管理和性能优化能力。 接着,本书会介绍Oracle的数据...
根据提供的文档信息,本文将详细解析Oracle 11g R2 RAC(Real Application Clusters)在Linux环境下的安装配置...此外,对于初次接触Oracle RAC的读者来说,建议在测试环境中先进行练习,积累经验后再应用于生产环境。
3. 存储过程示例:展示了如何在Delphi中调用和编写Oracle存储过程。 4. 跟踪工具:可能是第三方工具,如SQL Profiler,用于记录和分析数据库的SQL执行情况,帮助优化性能。 综上所述,这个压缩包提供的内容涵盖了...
然后是“PL/SQL编程”,这是Oracle特有的过程式语言,用于编写存储过程、函数和触发器,实现更复杂的业务逻辑。之后的“使用游标、存储过程和触发器”进一步深化了PL/SQL的应用,游标用于循环处理查询结果,存储过程...
以下是一个详细的安装过程演示,旨在帮助初次接触 Oracle 的用户顺利完成安装。 1. **前言** 在开始安装前,确保你对数据库有一定的了解,并且准备好安装环境。安装文档应清晰、易懂,以便初学者快速上手。官方...
通过阅读这份笔记,你可以快速回顾和理解Oracle的核心概念,如表、视图、索引、存储过程、触发器等,以及如何使用SQL进行数据查询、插入、更新和删除。 "文档oracle练习"可能是一系列的练习题或教程,这些练习通常...