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 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私