一、

加工处理后要变成如下效果

  1. create table test1 (sonum varchar2(10),lineid varchar2(10),qty int ,qty2 int ,remarks varchar2(10));
  2. create table test2(moid varchar2(10),qty int ,sonum varchar2(10),lineid varchar2(10),qty2 int,remarks varchar2(10))
  3. create table test3(sonum varchar2(10),lineid varchar2(10),moid varchar2(10),qty int )
  4.  
  5. insert into test1 values('SO1','10','500','','')
  6. insert into test1 values('SO1','10','1000','','')
  7. insert into test1 values('SO1','10','1500','','')
  8. insert into test1 values('SO2','10','10','','')
  9. insert into test2 values('mo1','4000','SO1','10','4000','')
  10. insert into test2 values('mo1','200','SO2','10','2000','')
  1. CREATE OR REPLACE PROCEDURE test123 (EXITCODE OUT NUMBER)
  2. is
  3.  
  4. V_so VARCHAR2 (10);
  5. V_lineid VARCHAR2 (10);
  6. V_mo VARCHAR2 (10);
  7.  
  8. BEGIN
  9.  
  10. FOR L_RECORD IN (select * from test1) LOOP
  11.  
  12. --注意此处还需要增加判断是否有数据写入三个变量,不然会报错,此处略
  13. select moid,sonum,lineid
  14. INTO V_mo, V_so, V_lineid
  15. from test2 where sonum=L_RECORD.sonum and lineid=L_RECORD.lineid and rownum=1;
  16.  
  17. --写入数据到新表时,需考虑test2 MO表中的数量是否能否满足test1供给,此处略
  18. insert into test3 values (V_so,V_lineid,V_mo,L_RECORD.qty);
  19.  
  20. END LOOP

二、

  1. create table test1 (sonum varchar2(10),lineid varchar2(10),qty int ,qty2 int ,remarks varchar2(10),planid varchar2(10));
  2. create table test2(moid varchar2(10),qty int ,sonum varchar2(10),lineid varchar2(10),qty2 int,remarks varchar2(10))
  3. create table test3(sonum varchar2(10),lineid varchar2(10),moid varchar2(10),qty int )
  4.  
  5. insert into test1 values('SO1','','','','','');
  6. insert into test1 values('SO1','','','','','');
  7. insert into test1 values('SO2','','','','','');
  8. insert into test2 values('mo1','','SO1','','','');
  9. insert into test2 values('mo2','','SO1','','','');
  10. insert into test2 values('mo3','','SO1','','','');
  11. insert into test2 values('mo4','','SO1','','','');
  12. insert into test2 values('mo5','','SO2','','','');
  1. CREATE OR REPLACE PROCEDURE STG.test321 (EXITCODE OUT NUMBER)
  2. is
  3.  
  4. PROCEDURE LoopAddData(TSONUM VARCHAR2,TLINEID VARCHAR2,TQTY INT ,TQTY2 INT,TPLANID VARCHAR2)
  5. as
  6. V_so VARCHAR2 (10);
  7. V_lineid VARCHAR2 (10);
  8. V_mo VARCHAR2 (10);
  9. V_qty int;
  10. V_qty2 int; --供给数量
  11. V_qtymid int; ---循环时需重新查询最新需求数量
  12. begin
  13.  
  14. --注意此处还需要增加判断是否有数据写入三个变量,不然会报错
  15. SELECT moid,sonum,lineid ,qty,qty2
  16. INTO V_mo, V_so, V_lineid ,V_qty,V_qty2
  17. FROM test2 where sonum=TSONUM and lineid=TLINEID and rownum=1;
  18.  
  19. IF TQTY2<=V_qty2 -- 需求数量小于供给数量
  20. THEN
  21. INSERT INTO TEST3 values (V_so,V_lineid,V_mo,TQTY2);
  22. UPDATE TEST1 SET qty2=0 where SONUM=TSONUM AND LINEID=TLINEID AND PLANID=TPLANID;
  23. UPDATE TEST2 SET QTY2=QTY2-TQTY2 where SONUM=TSONUM AND LINEID=TLINEID AND MOID=V_mo;
  24. commit;
  25.  
  26. ELSE
  27. --当余下的需求数量大于供给数量时,再次循环
  28. SELECT QTY2 INTO V_qtymid from test1 where SONUM=TSONUM AND LINEID=TLINEID AND PLANID=TPLANID;
  29. LoopAddData(TSONUM,TLINEID,TQTY,V_qtymid,TPLANID);
  30. END IF;
  31. end;
  32.  
  33. BEGIN
  34.  
  35. FOR L_RECORD IN (select SONUM,LINEID,QTY,QTY2,PLANID from test1)
  36.  
  37. LOOP
  38.  
  39. LoopAddData(L_RECORD.SONUM,L_RECORD.LINEID,L_RECORD.QTY,L_RECORD.QTY2,L_RECORD.PLANID);
  40. --注意此处还需要增加判断是否有数据写入三个变量,不然会报错
  41. --select moid,sonum,lineid
  42. -- INTO V_mo, V_so, V_lineid
  43. --from test2 where sonum=L_RECORD.sonum and lineid=L_RECORD.lineid and rownum=1;
  44.  
  45. --insert into test3 values (V_so,V_lineid,V_mo,L_RECORD.qty);
  46.  
  47. END LOOP;
  48.  
  49. END;
  50. /

ORACLE 对一个表进行循环查数,再根据MO供给数量写入另一个新表的更多相关文章

  1. 数据库SQL Server2012笔记(四)——多表查询、子查询、分页查询、用查询结果创建新表和外连接

    1.多表查询 1)笛卡尔集: select  *  from  表名1,表名2 select  *  from  表名1.表名2  where   表名1.字段名=表名2.字段名 注: 若有两张表有同 ...

  2. 新建表需要原表的数据,mysql 如何把查询到的结果插入到新表中

    项目运用情景:新建表需要原表的数据 1. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO  目标表  SELECT  * FROM  来源表 ...

  3. Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  4. sql 如何把查询得到的结果如何放入一个新表中

    如何把这个查询到的结果放到一张新表中? 2014-03-13 15:26   提问者采纳   表已经存在:insert into 表名 (列名1... 列名n) select 列名1....列名n f ...

  5. SQL Server 2017 SELECT…INTO 创建的新表指定到文件组

    原文:SQL Server 2017 SELECT-INTO 创建的新表指定到文件组 SELECT-INTO 在 SQL Server 中也是常见的一个功能,过去用此方法创建的新表只能存储到默认的文件 ...

  6. 送H-1B 及其他I-129 申请别忘用新表

    (梁勇律师事务所,lianglaw.com专稿)移民局从2010年11月23日 更新了申请H-1B 及其他非移民工作签证I-129 表,从2010年12月23日以后收到的I-129表都必须是2010年 ...

  7. Oracle 函数 “申请通过后,将该表中循环遍历到的所有内容插到另一个表中”

    create or replace function mcode_apply_insert_material(p_mca_no VARCHAR2, p_action VARCHAR2, p_wf_no ...

  8. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  9. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

随机推荐

  1. android 开源项目列表【持续整理中。。。】

    Android完整的开源项目,不包括各种组件的项目 社区客户端 oschina客户端:oschina网站的客户端,wp版,iOS版都有开源,一个社区型客户端,包括登录刷新各类视线 四次元新浪微博客户端 ...

  2. java学习——类之YuanZhu

    package hello; import java.util.Scanner; public class YuanZhu { public static void main(String[] arg ...

  3. Linux之 AWK SED

    AWK系列#awk 中 NF表示取最后一列 NR表示取第几行 NR==3 表示取第三行[root@nodchen-db01-test ~]# free -m | awk 'NR==3 {print $ ...

  4. 在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 ...

  5. Logistic回归的两种形式y=0/1,y=+1/-1

    第一种形式:y=0/1 第二种形式:y=+1/-1 第一种形式的损失函数可由极大似然估计推出: 第二种形式的损失函数:  , 参考:https://en.wikipedia.org/wiki/Loss ...

  6. RBF神经网络和BP神经网络的关系

    作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  7. Spark 编程模型(上)

    Spark的编程模型 核心概念(注意对比MR里的概念来学习) Spark Application的组成 Spark Application基本概念 Spark Application编程模型 回顾sc ...

  8. Sublime Text 3 个人使用总结

    待更新 Sublime Text 3\Packages\FileHeader\template\header

  9. 高斯混合模型(理论+opencv实现)

    查资料的时候看了一个不文明的事情,转载别人的东西而不标注出处,结果原创无人知晓,转载很多人评论~~标注了转载而不说出处这样的人有点可耻! 写在前面: Gaussian Mixture Model (G ...

  10. vconsole h5应用ajax请求抓包

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta co ...