练练游标吧,触发器不太好弄。
存储过程,触发器,包,游标的使用
create or replace procedure Stat_Order
as
--声明变量OrderID_,amount_
--分别用来暂存定单号和总金额
OrderID_ zwd_orders.id%type;
amount_ zwd_orders.amount%type;
--创建游标detail_cur
cursor detail_cur is
select id from zwd_orders;
begin
--打开游标
open detail_cur;
--提取游标
--FETCH <游标名> INTO <变量列表>
fetch detail_cur into OrderID_;
--循环进行
loop
--如果游标到结尾则结束
exit when not detail_cur%found;
--查询相关结果并将其保存到amount_中
--其中round(sum(num*price),0)为对sum(num*price)
--所求值进行四舍五入到小数点第0位
select sum(num*price) into amount_
from zwd_orderdetails
where orderid=orderid_;
select round(amount_,0) into amount_ from dual;
--更新结果
update zwd_orders set Amount=round(amount_,0)
where id=orderid_;
--再次提取游标(不可少,否则出现死循环)
fetch detail_cur into OrderID_;
end loop;
CLOSE detail_cur;
end Stat_Order;
--创建计算订单总金额和状态的存储过程
--参数Order_id为订单的ID号
create or replace procedure statisticsOrders
( Order_id zwd_Orders.id%type
)
as
MinStatus zwd_Orders.status%type; --订单状态
a number(16,2); --总金额
begin
select min(status),sum(num*price) into MinStatus,a
from zwd_orderdetails where OrderID=Order_ID;
Update zwd_Orders set Status=MinStatus,Amount=a
where id=Order_id;
end statisticsOrders;
--创建程序包,设置下面两个触发器用的全局变量
CREATE OR REPLACE Package Pkg_ORDERDETAILS_Update
as
GV_NEWID ZWD_ORDERS.ID%TYPE;
GV_OLDID ZWD_ORDERS.ID%TYPE;
End Pkg_ORDERDETAILS_Update;
--创建行方式触发器
create or replace trigger TRG_ORDERDETAILS_ROW
after insert or update or delete on zwd_orderdetails
for each row
declare
begin
Pkg_ORDERDETAILS_Update.GV_OLDID:=:Old.ORDERID;
Pkg_ORDERDETAILS_Update.GV_NEWID:=:NEW.ORDERID;
end TRG_ORDERDETAILS;
--创建表方式触发器
create or replace trigger TRG_ORDERDETAILS_TABLE
after insert or update or delete on zwd_orderdetails
declare
begin
IF Pkg_ORDERDETAILS_Update.GV_NEWID IS NOT NULL THEN
statisticsOrders(Pkg_ORDERDETAILS_Update.GV_NEWID);
END IF;
IF Pkg_ORDERDETAILS_Update.GV_OLDID IS NOT NULL
AND
(
Pkg_ORDERDETAILS_Update.GV_NEWID IS NULL OR
Pkg_ORDERDETAILS_Update.GV_NEWID<>Pkg_ORDERDETAILS_Update.GV_OLDID
)
THEN
statisticsOrders(Pkg_ORDERDETAILS_Update.GV_OLDID);
END IF;
end TRG_ORDERDETAILS;
分享到:
相关推荐
在Oracle数据库系统中,"ORCAL数据库实验答案"这一主题主要涵盖了如何创建并管理数据库对象,特别是表空间和数据文件。表空间是Oracle数据库中存储数据的主要逻辑单元,而数据文件则是物理存储这些数据的地方。以下...
orcal数据库连接池配置信息 可以直接复制到tomcat 配置文件下使用
远程导入与备份Oracle数据库是企业级数据库管理中的关键技能之一,尤其对于初学者而言,掌握这一操作能够极大地提升数据安全性和运维效率。本文将详细解析远程导入与备份Oracle数据库的操作流程,包括必要的环境配置...
动态行列转换,存储过程,自定义函数,带参数的存储过程,和带参数的函数
### Oracle数据库核心知识点详解 #### 一、Oracle数据库的重要性与市场需求 Oracle数据库在全球企业级市场中占据了主导地位,市场份额超过48.1%,这使得它成为企业级数据库领域的领头羊。随着企业数据量的不断增长...
Oracle数据库触发器是数据库管理系统中的一种重要特性,它允许开发者在特定的数据操作(如INSERT、UPDATE、DELETE)之前或之后执行自定义的SQL代码或PL/SQL块。这些代码可以用来实现业务规则、数据验证、审计跟踪等...
1.关闭oracle所有的服务。可以在windows的服务管理器中关闭; 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称,这个键是...
标题提到的".NET配orcal数据库 引擎兼容包"指的是.NET应用程序与Oracle数据库之间通信所需的兼容性库。描述中指出的问题是在调试Visual Studio(VS)项目时,由于缺少必要的DLL文件导致的错误。本文将详细讲解.NET...
Oracle数据库性能优化是数据库管理员和开发人员关注的关键领域,因为高效的数据库性能直接影响到应用的响应时间和整体系统的稳定性。以下是对"最常用的Oracle数据库性能优化"的详细解释: 1. **选用适合的Oracle...
Oracle数据库客户端是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在Windows 64位操作系统上与Oracle数据库服务器进行通信。"Instant Client"是Oracle客户端的一种简化版本,它包含了运行Oracle应用程序所...
### 知识点二:ORCAL数据库的特点与优势 #### 2.1 ORCAL数据库简介 此处提到的“ORCAL”可能是笔误或者是特定环境下的简称,通常我们谈论的是Oracle数据库。Oracle数据库是甲骨文公司开发的一款关系型数据库管理...
在IT行业中,数据库管理是至关重要的,特别是在存储和处理大量数据的应用程序中。Oracle数据库是全球领先的数据库管理系统之一,被广泛应用于企业级应用。而C#是一种常用的编程语言,尤其在开发Windows桌面应用和Web...
主要运用swt绘制界面,orcal数据库对数据进行管理,运用jdbc对数据进行操作,有些功能还运用到多线程技术。主要分为客户预定酒店端和酒店管理人员对客户预定的房间的一个处理和客户资料,房间管理等功能。
《数据库设计报告——ORACLE数据库设计》 数据库设计是信息系统开发的重要环节,它涉及到数据的组织、存储和访问策略,确保系统高效、稳定且易于维护。本报告将深入讲解ORACLE数据库的设计,包括基础概念、命名规则...
### Oracle数据库导入导出语句详解 在Oracle数据库管理中,数据备份与恢复是一项非常重要的工作。通过导入导出操作可以有效地实现数据的迁移、备份和恢复。本文将基于提供的内容,详细介绍Oracle数据库中的导入...
在本文中,我们将深入探讨如何使用LabVIEW连接Oracle数据库,以及在这个过程中可能遇到的关键知识点。 首先,要实现LabVIEW与Oracle数据库的连接,你需要安装以下组件: 1. **LabVIEW数据库工具包**:这是LabVIEW...
这里我们关注的是一个名为"MySql,SqlServer,Orcal连接数据库公共类.zip"的压缩包,它提供了一个通用的DBHelper类,用于方便地与MySQL、SQL Server和Oracle这三种主流关系型数据库进行交互。下面我们将详细讨论这个...
Oracle 数据库是关系型数据库管理系统中的重要成员,广泛应用于企业级的数据存储和管理。本文将详细阐述Oracle数据库中的一些常用语句,涵盖数据库创建、删除、备份、表操作、索引、视图以及SQL基本查询等方面。 1....