ORACLE 对一个表进行循环查数,再根据MO供给数量写入另一个新表
一、
加工处理后要变成如下效果
- create table test1 (sonum varchar2(10),lineid varchar2(10),qty int ,qty2 int ,remarks varchar2(10));
- create table test2(moid varchar2(10),qty int ,sonum varchar2(10),lineid varchar2(10),qty2 int,remarks varchar2(10))
- create table test3(sonum varchar2(10),lineid varchar2(10),moid varchar2(10),qty int )
- insert into test1 values('SO1','10','500','','')
- insert into test1 values('SO1','10','1000','','')
- insert into test1 values('SO1','10','1500','','')
- insert into test1 values('SO2','10','10','','')
- insert into test2 values('mo1','4000','SO1','10','4000','')
- insert into test2 values('mo1','200','SO2','10','2000','')
- CREATE OR REPLACE PROCEDURE test123 (EXITCODE OUT NUMBER)
- is
- V_so VARCHAR2 (10);
- V_lineid VARCHAR2 (10);
- V_mo VARCHAR2 (10);
- BEGIN
- FOR L_RECORD IN (select * from test1) LOOP
- --注意此处还需要增加判断是否有数据写入三个变量,不然会报错,此处略
- select moid,sonum,lineid
- INTO V_mo, V_so, V_lineid
- from test2 where sonum=L_RECORD.sonum and lineid=L_RECORD.lineid and rownum=1;
- --写入数据到新表时,需考虑test2 MO表中的数量是否能否满足test1供给,此处略
- insert into test3 values (V_so,V_lineid,V_mo,L_RECORD.qty);
- END LOOP
二、
- create table test1 (sonum varchar2(10),lineid varchar2(10),qty int ,qty2 int ,remarks varchar2(10),planid varchar2(10));
- create table test2(moid varchar2(10),qty int ,sonum varchar2(10),lineid varchar2(10),qty2 int,remarks varchar2(10))
- create table test3(sonum varchar2(10),lineid varchar2(10),moid varchar2(10),qty int )
- insert into test1 values('SO1','','','','','');
- insert into test1 values('SO1','','','','','');
- insert into test1 values('SO2','','','','','');
- insert into test2 values('mo1','','SO1','','','');
- insert into test2 values('mo2','','SO1','','','');
- insert into test2 values('mo3','','SO1','','','');
- insert into test2 values('mo4','','SO1','','','');
- insert into test2 values('mo5','','SO2','','','');
- CREATE OR REPLACE PROCEDURE STG.test321 (EXITCODE OUT NUMBER)
- is
- PROCEDURE LoopAddData(TSONUM VARCHAR2,TLINEID VARCHAR2,TQTY INT ,TQTY2 INT,TPLANID VARCHAR2)
- as
- V_so VARCHAR2 (10);
- V_lineid VARCHAR2 (10);
- V_mo VARCHAR2 (10);
- V_qty int;
- V_qty2 int; --供给数量
- V_qtymid int; ---循环时需重新查询最新需求数量
- begin
- --注意此处还需要增加判断是否有数据写入三个变量,不然会报错
- SELECT moid,sonum,lineid ,qty,qty2
- INTO V_mo, V_so, V_lineid ,V_qty,V_qty2
- FROM test2 where sonum=TSONUM and lineid=TLINEID and rownum=1;
- IF TQTY2<=V_qty2 -- 需求数量小于供给数量
- THEN
- INSERT INTO TEST3 values (V_so,V_lineid,V_mo,TQTY2);
- UPDATE TEST1 SET qty2=0 where SONUM=TSONUM AND LINEID=TLINEID AND PLANID=TPLANID;
- UPDATE TEST2 SET QTY2=QTY2-TQTY2 where SONUM=TSONUM AND LINEID=TLINEID AND MOID=V_mo;
- commit;
- ELSE
- --当余下的需求数量大于供给数量时,再次循环
- SELECT QTY2 INTO V_qtymid from test1 where SONUM=TSONUM AND LINEID=TLINEID AND PLANID=TPLANID;
- LoopAddData(TSONUM,TLINEID,TQTY,V_qtymid,TPLANID);
- END IF;
- end;
- BEGIN
- FOR L_RECORD IN (select SONUM,LINEID,QTY,QTY2,PLANID from test1)
- LOOP
- LoopAddData(L_RECORD.SONUM,L_RECORD.LINEID,L_RECORD.QTY,L_RECORD.QTY2,L_RECORD.PLANID);
- --注意此处还需要增加判断是否有数据写入三个变量,不然会报错
- --select moid,sonum,lineid
- -- INTO V_mo, V_so, V_lineid
- --from test2 where sonum=L_RECORD.sonum and lineid=L_RECORD.lineid and rownum=1;
- --insert into test3 values (V_so,V_lineid,V_mo,L_RECORD.qty);
- END LOOP;
- END;
- /
ORACLE 对一个表进行循环查数,再根据MO供给数量写入另一个新表的更多相关文章
- 数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接
1.多表查询 1)笛卡尔集: select * from 表名1,表名2 select * from 表名1.表名2 where 表名1.字段名=表名2.字段名 注: 若有两张表有同 ...
- 新建表需要原表的数据,mysql 如何把查询到的结果插入到新表中
项目运用情景:新建表需要原表的数据 1. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 ...
- Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境
目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...
- sql 如何把查询得到的结果如何放入一个新表中
如何把这个查询到的结果放到一张新表中? 2014-03-13 15:26 提问者采纳 表已经存在:insert into 表名 (列名1... 列名n) select 列名1....列名n f ...
- SQL Server 2017 SELECT…INTO 创建的新表指定到文件组
原文:SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 SELECT-INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件 ...
- 送H-1B 及其他I-129 申请别忘用新表
(梁勇律师事务所,lianglaw.com专稿)移民局从2010年11月23日 更新了申请H-1B 及其他非移民工作签证I-129 表,从2010年12月23日以后收到的I-129表都必须是2010年 ...
- Oracle 函数 “申请通过后,将该表中循环遍历到的所有内容插到另一个表中”
create or replace function mcode_apply_insert_material(p_mca_no VARCHAR2, p_action VARCHAR2, p_wf_no ...
- Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
随机推荐
- android 开源项目列表【持续整理中。。。】
Android完整的开源项目,不包括各种组件的项目 社区客户端 oschina客户端:oschina网站的客户端,wp版,iOS版都有开源,一个社区型客户端,包括登录刷新各类视线 四次元新浪微博客户端 ...
- java学习——类之YuanZhu
package hello; import java.util.Scanner; public class YuanZhu { public static void main(String[] arg ...
- Linux之 AWK SED
AWK系列#awk 中 NF表示取最后一列 NR表示取第几行 NR==3 表示取第三行[root@nodchen-db01-test ~]# free -m | awk 'NR==3 {print $ ...
- 在win7/WINDOWS SERVER 2008 R2上安装 vmware POWERcli 6.5
安装.NET Framework 4.6.2下载NDP462-KB3151800-x86-x64-AllOS-ENU.exe,安装安装PowerShell 4.0(5.0依赖4.0)下载Windows ...
- Logistic回归的两种形式y=0/1,y=+1/-1
第一种形式:y=0/1 第二种形式:y=+1/-1 第一种形式的损失函数可由极大似然估计推出: 第二种形式的损失函数: , 参考:https://en.wikipedia.org/wiki/Loss ...
- RBF神经网络和BP神经网络的关系
作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Spark 编程模型(上)
Spark的编程模型 核心概念(注意对比MR里的概念来学习) Spark Application的组成 Spark Application基本概念 Spark Application编程模型 回顾sc ...
- Sublime Text 3 个人使用总结
待更新 Sublime Text 3\Packages\FileHeader\template\header
- 高斯混合模型(理论+opencv实现)
查资料的时候看了一个不文明的事情,转载别人的东西而不标注出处,结果原创无人知晓,转载很多人评论~~标注了转载而不说出处这样的人有点可耻! 写在前面: Gaussian Mixture Model (G ...
- vconsole h5应用ajax请求抓包
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta co ...