广告
返回顶部
首页 > 资讯 > 数据库 >oracle中创建存储过程,以及存储过程中调用游标
  • 451
分享到

oracle中创建存储过程,以及存储过程中调用游标

2024-04-02 19:04:59 451人浏览 独家记忆
摘要

CREATE OR REPLACE PROCEDURE aa is   CURSOR prodCombind_cur IS SELECT * FROM proddata

CREATE OR REPLACE PROCEDURE aa

 is

   CURSOR prodCombind_cur IS SELECT * FROM proddata.product_combind_info pci;

   prodCombindInfo prodCombind_cur%ROWTYPE;

   id_marketproduct_info varchar2(32);


   CURSOR combindPackage_cur IS SELECT * FROM proddata.combind_package_info;

   combindPackageInfo combindPackage_cur%ROWTYPE;

   id_package_info varchar2(32);


   tmpid_marketproduct_info varchar2(32);

   

   --查询包含有要删除的子产品的产品组合

    CURSOR delete_combind_cur(id_sub_product VARCHAR2) IS 

       select * from proddata.product_combind_rel pcr where pcr.id_product=id_sub_product;

    delCombindInfo delete_combind_cur%ROWTYPE;


begin

    begin

--marketproduct_info表中已经存在的a57,和a72先删除

     select m.id_marketproduct_info into tmpid_marketproduct_info from  proddata.marketproduct_info m where m.marketproduct_code='MP02000057' and m.is_combined='1';

     --删除市场产品对应的产品组合

     OPEN delete_combind_cur(tmpid_marketproduct_info); --打开游标;

     loop   

         FETCH delete_combind_cur INTO delCombindInfo; --从游标中取值要删除的产品组合的id

                 --首先删除套餐下所有的子产品

                 delete from proddata.combind_package_rel cpr where cpr.id_combind_package_info in (

                     select cpi.id_combind_package_info from proddata.combind_package_info cpi 

                     where cpi.id_product_combind_info=delCombindInfo.id_product_combind_info);

                 --在删除套餐

                 delete from proddata.combind_package_info cpi 

                     where cpi.id_product_combind_info=delCombindInfo.id_product_combind_info;


                --删除产品组合下的子产品

                delete from proddata.product_combind_rel pcr where pcr.id_product_combind_info=delCombindInfo.id_product_combind_info;

                delete from proddata.marketproduct_rule_param mrp where mrp.id_marketproduct_info= delCombindInfo.id_product_combind_info; 

                delete from proddata.marketproduct_department md where md.id_marketproduct_info=delCombindInfo.id_product_combind_info;

                delete from proddata.product_combind_info pci where pci.id_product_combind_info=delCombindInfo.id_product_combind_info;

         exit when delete_combind_cur%notfound;  

     end loop;

     close delete_combind_cur; --关闭游标

     delete from proddata.marketproduct_rule_param mr where mr.id_marketproduct_info= tmpid_marketproduct_info;

     delete from proddata.marketproduct_department md where md.id_marketproduct_info=tmpid_marketproduct_info;

     delete from proddata.marketproduct_plan_duty_rel mpdr where mpdr.id_marketproduct_info=tmpid_marketproduct_info;

     delete from proddata.marketproduct_info m where m.id_marketproduct_info=tmpid_marketproduct_info;  

     --

     select m.id_marketproduct_info into tmpid_marketproduct_info from  proddata.marketproduct_info m  where m.marketproduct_code='MP02000072' and m.is_combined='1';

     --删除市场产品对应的产品组合

     OPEN delete_combind_cur(tmpid_marketproduct_info); --打开游标;

     loop   

         FETCH delete_combind_cur INTO delCombindInfo; --从游标中取值

                  --首先删除套餐下所有的子产品

                 delete from proddata.combind_package_rel cpr where cpr.id_combind_package_info in (

                     select cpi.id_combind_package_info from proddata.combind_package_info cpi 

                     where cpi.id_product_combind_info=delCombindInfo.id_product_combind_info);

                 --在删除套餐

                 delete from proddata.combind_package_info cpi 

                     where cpi.id_product_combind_info=delCombindInfo.id_product_combind_info;

                --删除产品组合下的子产品

                delete from proddata.product_combind_rel pcr where pcr.id_product_combind_info=delCombindInfo.id_product_combind_info;

                delete from proddata.marketproduct_rule_param mrp where mrp.id_marketproduct_info= delCombindInfo.id_product_combind_info; 

                delete from proddata.marketproduct_department md where md.id_marketproduct_info=delCombindInfo.id_product_combind_info;

                delete from proddata.product_combind_info pci where pci.id_product_combind_info=delCombindInfo.id_product_combind_info;

         exit when delete_combind_cur%notfound;  

     end loop;

     close delete_combind_cur; --关闭游标

     delete from proddata.marketproduct_rule_param mr where mr.id_marketproduct_info= tmpid_marketproduct_info;

     delete from proddata.marketproduct_department md where md.id_marketproduct_info=tmpid_marketproduct_info;

     delete from proddata.marketproduct_plan_duty_rel mpdr where mpdr.id_marketproduct_info=tmpid_marketproduct_info;

     delete from proddata.marketproduct_info m where m.id_marketproduct_info=tmpid_marketproduct_info;

     --

     commit;

     exception

        when others then

           dbms_output.put_line('删除a57和a72产品时,出现异常');

     end;

     

--需要处理的表:将表product_combind_info中的数据,copy到表marketproduct_info中;

 for prodCombindInfo in prodCombind_cur loop

    begin

       select m.id_marketproduct_info into id_marketproduct_info from proddata.marketproduct_info m

         where m.id_marketproduct_info = prodCombindInfo.id_product_combind_info;

       dbms_output.put_line('product已经存在的:'|| prodCombindInfo.marketproduct_code ||'-'|| prodCombindInfo.MARKETPRODUCT_NAME);

    exception

         --这里抛出异常,是表示上面的select没有查询到记录引起的

         when others then

           dbms_output.put_line('product不存在的:'|| prodCombindInfo.marketproduct_code||'-'||prodCombindInfo.marketproduct_name);

           insert into proddata.marketproduct_info

             (CREATED_BY,

              CREATED_DATE,

              UPDATED_BY,

              UPDATED_DATE,

              marketproduct_code,

              marketproduct_name,

              product_class,

              status,

              is_combined,

              id_marketproduct_info,

              department_code,

              version,

              policy_type)

           values

             (prodCombindInfo.CREATED_BY,

              prodCombindInfo.CREATED_DATE,

              prodCombindInfo.UPDATED_BY,

              prodCombindInfo.UPDATED_DATE,

              prodCombindInfo.marketproduct_code,

              prodCombindInfo.marketproduct_name,

              prodCombindInfo.MaiN_PRODUCT_CLASS,

              prodCombindInfo.status,

              '1',

              prodCombindInfo.ID_PRODUCT_COMBIND_INFO,

              prodCombindInfo.DEPARTMENT_CODE,

              prodCombindInfo.version,

              prodCombindInfo.POLICY_TYPE);

    end;

 end loop;

 commit;

--需要处理的表:将表combind_package_info中的数据,copy到表package_info中

 for combindPackageInfo in combindPackage_cur loop

    begin

        select p.id_package_info into id_package_info from  proddata.package_info p where p.id_package_info=combindPackageInfo.ID_COMBIND_PACKAGE_INFO;

         dbms_output.put_line('package已经存在的:'|| combindPackageInfo.PACKAGE_CODE||'-'||combindPackageInfo.PACKAGE_NAME);

    exception

         --这里抛出异常,是表示上面的select没有查询到记录引起的

         when others then

            insert into  proddata.package_info

               (ID_PACKAGE_INFO,

                ID_MARKETPRODUCT_INFO,

                PACKAGE_CODE,

                PACKAGE_NAME,

                CREATED_BY,

                CREATED_DATE,

                UPDATED_BY,

                UPDATED_DATE,

                status)

             values

               (combindPackageInfo.ID_COMBIND_PACKAGE_INFO,

                combindPackageInfo.ID_PRODUCT_COMBIND_INFO,

                combindPackageInfo.PACKAGE_CODE,

                combindPackageInfo.PACKAGE_NAME,

                combindPackageInfo.CREATED_BY,

                combindPackageInfo.CREATED_DATE,

                combindPackageInfo.UPDATED_BY,

                combindPackageInfo.UPDATED_DATE,

                '1');

            dbms_output.put_line('package不存在的:'|| combindPackageInfo.PACKAGE_CODE||'-'||combindPackageInfo.PACKAGE_NAME);

    end;

 end loop;

  commit;

end;


您可能感兴趣的文档:

--结束END--

本文标题: oracle中创建存储过程,以及存储过程中调用游标

本文链接: https://www.lsjlt.com/news/45858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle中创建存储过程,以及存储过程中调用游标
    CREATE OR REPLACE PROCEDURE aa is   CURSOR prodCombind_cur IS SELECT * FROM proddata...
    99+
    2022-10-18
  • oracle存储过程中游标怎么使用
    在Oracle存储过程中,可以使用游标来处理查询结果集。游标允许逐行处理查询结果,类似于使用指针遍历数据。以下是在Oracle存储过...
    99+
    2023-09-09
    oracle
  • MySQL存储过程创建及调用方法
    MySQL存储过程是一个sql语句,那么我们如何创建呢,MySQL存储过程创建及修改,删除操作。 1,存储过程创建 DELIMITER //CREATE PROCEDURE G...
    99+
    2022-10-18
  • Oracle中怎么创建存储过程和存储函数
    本篇文章为大家展示了Oracle中怎么创建存储过程和存储函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。select * from emp;------...
    99+
    2022-10-18
  • SQL中创建存储过程
    目录创建SQL存储过程需要使用到的语法无参数带参两个参数declare关键字的使用IF语句case语句loop语句repeatwhile创建SQL存储过程需要使用到的语法 - 创建存储过程 CREATE 存储过程的名称(...
    99+
    2022-11-14
  • oracle存储过程游标怎么使用
    在Oracle存储过程中,使用游标可以迭代访问结果集。以下是使用游标的一般步骤:1. 声明游标:在存储过程的声明部分,使用`CURS...
    99+
    2023-09-21
    oracle
  • mysql存储过程中游标怎么用
    这篇文章将为大家详细讲解有关mysql存储过程中游标怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 DELIMITER $$USE `...
    99+
    2022-10-18
  • oracle 存储过程两次遍历游标
            在一个存储过程中有两个游标,而且第二个游标用到了第一个游标的值,这样的存储过程怎么写呢?以下是个例子:create or...
    99+
    2022-10-18
  • oracle存储过程的游标是什么
    Oracle存储过程中的游标是一种用于遍历和访问查询结果集的数据库对象。游标可以被认为是指向某个查询结果集的指针,通过游标可以逐行地...
    99+
    2023-08-24
    oracle
  • mybatis调用oracle存储过程
    有输入与输出参数的存储过程oracle存储过程部分代码:create or replace procedure PT_copy_Shipment_One_Data(  oldShipmentId ...
    99+
    2022-10-18
  • Oracle中如何调试存储过程
    要调试Oracle中的存储过程,可以使用以下方法:1. 使用DBMS_OUTPUT包:通过在存储过程中使用DBMS_OUTPUT包中...
    99+
    2023-08-25
    oracle
  • Mybatis中怎么调用Oracle存储过程
    Mybatis中怎么调用Oracle存储过程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1:调用无参数的存储过程。创建存储过...
    99+
    2022-10-18
  • Oracle中怎么调用Java存储过程
    这期内容当中小编将会给大家带来有关Oracle中怎么调用Java存储过程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用orac...
    99+
    2023-06-17
  • java中如何调用ORACLE存储过程
    小编给大家分享一下java中如何调用ORACLE存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:无返回值的存储过程存储过程为:CREATE OR REP...
    99+
    2023-06-03
  • SQLServer中怎么创建存储过程
    这篇文章给大家介绍SQLServer中怎么创建存储过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。打开SQL Server 2005的管理工具,选中需要创建存储过程的数据库,找到“可...
    99+
    2022-10-18
  • mysql中怎么创建存储过程
    mysql中怎么创建存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。mysql创建存储过程和函数 一个存储程序是可以被存储在服...
    99+
    2022-10-18
  • MySQL5中怎样创建存储过程
    MySQL5中怎样创建存储过程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  1 用mysql客户端登入  2 选择数据库 ...
    99+
    2022-10-18
  • SQL中如何创建存储过程
    今天就跟大家聊聊有关SQL中如何创建存储过程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建存储过程 表名和比较字段可以做参数的存储过程 ...
    99+
    2022-10-18
  • plsql存储过程怎么创建与调用
    要创建一个PL/SQL存储过程,可以按照以下步骤进行操作:1. 打开SQL开发工具,例如Oracle SQL Developer或P...
    99+
    2023-10-11
    plsql
  • oracle怎么调用存储过程
    要调用Oracle存储过程,可以按照以下步骤进行操作:1. 创建存储过程:在Oracle数据库中创建存储过程。可以使用PL/SQL开...
    99+
    2023-08-23
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作