weixin_38647584 2022-05-12 13:52 采纳率: 69.2%
浏览 39
已结题

oracle创建的存储过程有问题,本人第一写有点不会,需要看下问题

项目有个主表得数据来自子表和子表关联表里,需要去重然后抽取对应字段,存到主表

如下是我写得存储过程,大体思路是相通过查询出得结果集循环插入到PPS_MBOM_INFO_TEST 表中去
seq_pps_mbom_info_test.nextval是创建得主表序列号

CREATE OR REPLACE PROCEDURE "test"
BEGIN
FOR list IN (SELECT
DISTINCT
pmd.ACCOUNT_NUMBER AS ACCOUNT_NUMBER,
ppv.MLOC AS PPVMLOC,
ppv.BOM_NUM AS PPVBOM_NUM,
ppv.SERIALNUM AS PPVSERIALNUM
FROM
PPS_MBOM_DETAILED_0415 pmd
LEFT JOIN (
SELECT
a.TOP_PLAN_NUM,
a.MLOC,
a.BOM_NUM,
a.SERIALNUM
FROM
PPS_PLAN_VIN a
LEFT JOIN ( SELECT TOP_PLAN_NUM, max( VERSIONS ) AS max_VERSIONS FROM PPS_PLAN_VIN GROUP BY TOP_PLAN_NUM ) b ON a.TOP_PLAN_NUM = b.TOP_PLAN_NUM
AND a.VERSIONS = b.max_VERSIONS
) ppv ON ppv.TOP_PLAN_NUM = pmd.account_number) loop

insert into PPS_MBOM_INFO_TEST a values(seq_pps_mbom_info_test.nextval.nextval,list.ACCOUNT_NUMBER ,list.PPVMLOC,list.PPVBOM_NUM,list.PPVSERIALNUM);
END;
commit;
END;

Try to start debugging

Success: Debugging started

Debugging ends with error

ORA-06550: line 1, column 14:
PLS-00905: object PPS.test is invalid
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored

请大家看下,谢谢大家

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-05-12 21:32
    关注

    少了as,没有end loop

    CREATE OR REPLACE PROCEDURE "test" as
    BEGIN
      FOR list IN (SELECT DISTINCT pmd.ACCOUNT_NUMBER AS ACCOUNT_NUMBER,
                                   ppv.MLOC           AS PPVMLOC,
                                   ppv.BOM_NUM        AS PPVBOM_NUM,
                                   ppv.SERIALNUM      AS PPVSERIALNUM
                     FROM PPS_MBOM_DETAILED_0415 pmd
                     LEFT JOIN (SELECT a.TOP_PLAN_NUM,
                                      a.MLOC,
                                      a.BOM_NUM,
                                      a.SERIALNUM
                                 FROM PPS_PLAN_VIN a
                                 LEFT JOIN (SELECT TOP_PLAN_NUM,
                                                  max(VERSIONS) AS max_VERSIONS
                                             FROM PPS_PLAN_VIN
                                            GROUP BY TOP_PLAN_NUM) b
                                   ON a.TOP_PLAN_NUM = b.TOP_PLAN_NUM
                                  AND a.VERSIONS = b.max_VERSIONS) ppv
                       ON ppv.TOP_PLAN_NUM = pmd.account_number) loop
      
        insert into PPS_MBOM_INFO_TEST a
        values
          (seq_pps_mbom_info_test.nextval.nextval,
           list.ACCOUNT_NUMBER,
           list.PPVMLOC,
           list.PPVBOM_NUM,
           list.PPVSERIALNUM);
      END loop;
      commit;
    END;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 已采纳回答 6月29日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 netty整合springboot之后自动重连失效
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击