create procedure PRO_update_Goods_group_stock is
v_min_stock NUMBER(10, 2);
v_gg_stock NUMBER(10, 2);
v_goods_no number;
v_sum_cost NUMBER(10, 2);
begin
for g_goods_no in (select ggi.goods_no
from goods_group_item ggi
where ggi.is_delete = 'N'
GROUP by ggi.goods_no) loop
select count(*)
into v_goods_no
from goods_no_stock gn
where gn.goods_no = g_goods_no.goods_no;
if v_goods_no > 0 then
continue;
end if; --查询组合子商品的库存再除以绑定的数量 取最小值 gg主商品 g子商品
select min(TRUNC(g.available_stock /
decode(gg1.group_goods_amount,
0,
1,
gg1.group_goods_amount),
0))
into v_min_stock
from goods_group_item gg1, goods g, goods gg
where gg1.goods_no = g_goods_no.goods_no
and gg1.is_delete = 'N'
and gg.goods_id = gg1.goods_id
and gg.is_delete = 'N'
and g.goods_id = gg1.GROUP_GOODS_ID; --计算成本价格 gg主商品 g子商品
select trunc(sum(g.cost_price * gg1.group_goods_amount), 2)
into v_sum_cost
from goods_group_item gg1, goods g, goods gg
where gg1.goods_no = g_goods_no.goods_no
and gg1.is_delete = 'N'
and gg.goods_id = gg1.goods_id
and gg.is_delete = 'N'
and g.goods_id = gg1.GROUP_GOODS_ID; update goods
set available_stock = v_min_stock, COST_PRICE = v_sum_cost
where goods_no = g_goods_no.goods_no
and is_delete = 'N';
commit;
end loop; --下架问题组合码
insert into sys_user_message
(MESSAGE_ID,
PRODUCT_CODE,
TARGET_MODUL_ID,
MESSAGE_BODY,
MESSAGE_STAGE,
IS_DELETE)
select sys_user_message_seq.nextval,
p.product_code,
254,
'商品:'||p.product_code||' 没有维护组合码',
'',
'N'
from product p
where not exists (select 1
from goods_group_item ggi
where ggi.goods_no = p.product_code)
and p.is_delete = 'N'
and p.is_onsale = 'Y'
and p.product_code like 'A%'; update product p set p.is_onsale = 'N'
where not exists (select 1
from goods_group_item ggi
where ggi.goods_no = p.product_code)
and p.is_delete = 'N'
and p.is_onsale = 'Y'
and p.product_code like 'A%'; commit;
end; select * from goods_no_stock gn
where gn.goods_no in (select ggi.goods_no
from goods_group_item ggi
where ggi.is_delete = 'N'
GROUP by ggi.goods_no); select * from goods g where g.GOODS_NO='02-00056'; select * from goods g where g.GOODS_NO=''; select * from goods g where g.goods_no=''; select gn.goods_no from goods_no_stock gn;
goods_no_stock:库存同步黑名单表,在这张表中的数据,都不会进行相关的更新操作
 

oracle 存储函数,更新库存的更多相关文章

  1. Oracle存储函数,存储过程

    一.Oracle存储函数:存储的PL/SQL语法块,完成特定的功能.1.语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <fun ...

  2. ORACLE 存储函数

    前奏: 必要的概念: ORACLE 提供能够把 PL/SQL 程序存储在数据库中.并能够在不论什么地方来运行它.这样就叫存储过 程或函数. 过程和函数统称为 PL/SQL 子程序.他们是被命名的 PL ...

  3. Oracle存储函数jdbc调用

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  4. oracle存储函数实例

    CREATE OR REPLACE PROCEDURE "PROC_INS_DAY_DOCTOR_LL"(v_date in VARCHAR) is --PROC_INS_DAY_ ...

  5. Oracle的基本语法,存储函数及触发器

    1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据 ...

  6. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  7. oracle存储过程和存储函数&触发器

    oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...

  8. oracle之存储过程和存储函数的使用和区别

    #存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...

  9. Oracle数据库游标,序列,存储过程,存储函数,触发器

    游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...

随机推荐

  1. node基础学习——path的处理与路径转换

    处理与转换路径path normalize该方法将非标准路径字符串转换为标准路径字符串,在转换过程中执行以下操作: ①解析路径字符串中的’..’字符串与’.’字符串,返回解析后的标准路径. ②将多个斜 ...

  2. ARTS-week7

    Algorithm 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. Two Sum 编写一个 SQL 查询,满足条件:无论 ...

  3. T-sql 遍历结果集

    DECLARE @TAB TABLE( [科室编号] [varchar](50) NULL, [科室编码] [varchar](50) NULL, [科室名称] [varchar](50) NULL, ...

  4. YII2 更新数据不成功

    起因: CLI模式,定时任务.同步其他系统中的DB数据,通过视图的方式. 历程: 原脚本已经写好,实在已经有的基础上修改,增加新的字段. 加了字段后,执行,但始终不成功,表里记录的utime也是能更新 ...

  5. VS2012 VS2010 VTK引入设置

    1.C/C++ ---> 附加包含的目录 F:/VTK61/VTK-6.1.0/SLN/Filters/Sources F:/VTK61/VTK-6.1.0/VTK-6.1.0/Filters/ ...

  6. wordpress调用自定义菜单

    wordpress要调用自定义菜单首先要注册菜单,将代码添加到主题文件夹下的function.php中,比如wordpress自带主题2019的定义如下 // This theme uses wp_n ...

  7. Spark数据倾斜解决方案(转)

    本文转发自技术世界,原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势  发表于 2017 ...

  8. AtCoder Beginner Contest 125 解题报告

    那天晚上刚好有事就咕了. 最近的那一场E题还不会写.F题全场又只过了三个?留坑吧... A - Biscuit Generator #include <cstdio> using name ...

  9. jsp大附件上传,支持断点续传

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  10. 如何用Windbg从dump获取计算机名、主机名

    对内存转储时发生的事情有一定的了解是非常重要的.这有助于您确定要执行哪些WinDbg命令,并为您提供一些有关如何解释这些命令输出的上下文.我正在查看一个服务器的内存转储,该服务器存在性能问题.我在内存 ...