练练游标吧,触发器不太好弄。
存储过程,触发器,包,游标的使用
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;
分享到:
相关推荐
用于帮助初学者了解远程导入备份orcal数据库操作
创建一个本地位图管理表空间CAP_ts,表空间对应一个数据文件CAP_ts.dbf,该数据文件初始大小为20M,可以自动.......................
orcal数据库连接池配置信息 可以直接复制到tomcat 配置文件下使用
orcal 数据库文件,关于触发器的例子,没有什么多大的用处
动态行列转换,存储过程,自定义函数,带参数的存储过程,和带参数的函数
orcal数据库的插入demo。c#
orcal的增删改查语句,安装等,里面有sql语句可以直接的导入到数据库中,还有orcal的远程连接等等
orcal数据库导入导出语句 cmd命令 进行数据库的完整还远导出
1 学习数据库的基础 2 一个书籍库实例 3 供初学者使用 4 数据库设计报告 5orcal数据库设计
1.关闭oracle所有的服务。可以在windows的服务管理器中关闭; 2.打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 删除该路径下的所有以oracle开始的服务名称,这个键是...
文档是最常用的Orcal优化说明,适用基于Orcal开发的程序员
labview连接orcal数据库,研究了一周才终于可以正常使用了,现在分享出来
数据库优化,提供性能。通过不同方法,提高执行速度等等。
.NET 连接 orcal数据库 的时候,调试VS报错,原因是缺少引擎兼容包,这是7个dll,在项目中添加引用就可以了
instantclient-basiclite-windows.x64-11.2.0.3.0.zip支持在windows64位系统
神经网络与ORCAL数据库相结合的实现。PDF版
orcal数据库相关的jar包 包含ojdbc14.jar , sdoapi.jar ,sdonm.jar ,sdoutl.jar 以及导入本地仓的脚本
当navicta连接orcal数据库出错时,用来修改配置文件的资源包