`

oracle sql数组处理 pl SQl块语句示例

 
阅读更多
有时候维护数据,要处理时,要写一些复杂一些的SQl。这里偶在一个项目中也正好用到,就拿出来共享。

一,这是简单示例。
  --select substr(zone_id,0,8) from ECOM_ZONE where zone_id like '%9999' and zone_id not in(select zone_id   from ECOM_AREA_ZONE where zone_id like '%9999');
  
   ----这里是两个用来添加其他商圈的PL SQL块,
   ----第一个主要因为测试库中的数据不完整,而做的相应处理。所以要先执行第一个,以保证在存在不完整数据时能顺利完成操作。
  
   ---------------plsql块 1-----------------------
   -----------------------------------------------------------------------------------------------------------------
  
   declare cursor addareazone is
  
   select zone_id from ECOM_ZONE where zone_id like '%9999' and zone_id not in(select zone_id   from ECOM_AREA_ZONE where zone_id like '%9999');
     begin
      for myaddareazone in addareazone loop
    
       insert into  ECOM_AREA_ZONE (area_code,zone_id) values(substr(myaddareazone.zone_id,0,8),myaddareazone.zone_id);
      end loop;
      end;

二。这个稍微复杂,有数组处理

--------1.修改购物服务-sql---------------

DECLARE
TYPE temp_array IS TABLE OF varchar2(60)
INDEX BY BINARY_INTEGER;

   gowu temp_array;
    maxcode integer;
    codevarcahr varchar2(10);
     codeint integer;
     codeheader varchar2(6);
     maxcodevhar varchar2(10);
    
begin
  codeheader:='010001';
   gowu(1) := '电器/家电专业卖场'; 
   gowu(2) := '电器/家电专卖店';
   gowu(3) := '家具家居专业卖场';
   gowu(4) := '家具家居专卖店';
   gowu(5) := '通讯数码专业卖场';
   gowu(6) := '特色土产商店';

  select max(substr(sort_code,7)) into maxcode  from ecom_sort where sort_code like '010001%';--查当前最大值
     
   -----------------这是修改最后一项其他服务的sql,但如果其他服务存在子记录的话,则不能操作成功-------- ---------------------- 
  
   -------------------注意:如果这里用了,则在下面的for循环中要修改为: codeint:=maxcode+i-1;  如果没用,则 则在下面的for循环中要修改为: codeint:=maxcode+i;
   /*    codeint:=maxcode+gowu.count;
   if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;
      end if;
     
         if(codeint<10)
        
        then
          codevarcahr:=codeheader||'000'||codeint;    
      end if;
     
     
           if(maxcode>=10) then maxcodevhar:=codeheader||'00'||maxcode;
      end if;
     
         if(maxcode<10)
        
        then
          maxcodevhar:=codeheader||'000'||maxcode;    
      end if;
     
      update ecom_sort set sort_code=codevarcahr where sort_code=maxcodevhar;*/
  -------------------------------------------------  
 
FOR i IN 1..gowu.count LOOP
        codeint:=maxcode+i;     
       if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;
        end if;   
        if(codeint<10)      
        then
          codevarcahr:=codeheader||'000'||codeint;    
      end if;
     
       insert into ecom_sort(sort_code,name,grade,parent_code,sequence) values(codevarcahr,gowu(i),2,codeheader,codeint);
   END LOOP;
  END;

--------修改购物服务-sql-end--------------



--------2.修改餐饮美食-sql---------------

DECLARE
TYPE temp_array IS TABLE OF varchar2(60)
INDEX BY BINARY_INTEGER;

   gowu temp_array;
    maxcode integer;
    codevarcahr varchar2(10);
     codeint integer;
     codeheader varchar2(6);
    
begin
  codeheader:='010002';
   gowu(1) := '徽菜'; 
   gowu(2) := '川菜';
   gowu(3) := '湘菜';
   gowu(4) := '江海鲜';
    gowu(5) := '江浙菜'; 
   gowu(6) := '东北菜';
   gowu(7) := '粤港菜';
   gowu(8) := '鲁菜';
   gowu(9) := '其他菜系'; 
   gowu(10) := '西餐正餐';
   gowu(11) := '时尚餐厅';
   gowu(12) := '咖啡茶饮';
    gowu(13) := '蛋糕甜品冷饮'; 
   gowu(14) := '韩国料理';
   gowu(15) := '东南亚菜';

  select max(substr(sort_code,7)) into maxcode  from ecom_sort where sort_code like '010002%';--查当前最大值
    
 
FOR i IN 1..gowu.count LOOP
        codeint:=maxcode+i;    
       if(codeint>=10) then codevarcahr:=codeheader||'00'||codeint;  
       end if;
        if(codeint<10)     
        then
          codevarcahr:=codeheader||'000'||codeint;     
      end if;    
       insert into ecom_sort(sort_code,name,grade,parent_code,sequence) values(codevarcahr,gowu(i),2,codeheader,codeint);
   END LOOP;
  END;

--------修改餐饮美食-sql-end--------------

-----带结果集游标的使用--------------------------

   declare
    goodsIder  varchar2(32);
cursor goosattr_info is

select goods_id goodsId from ecom_goods where goods_id not in(select goods_id from ecom_coupon_download);

  begin
    
         for mygoods_info in goosattr_info loop       
            insert into ecom_coupon_download (GOODS_ID, SMS_DOWNLOAD_COUNT, MMS_DOWNLOAD_COUNT, PRINT_COUNT, TOTAL_COUNT)values (mygoods_info.goodsId, 0, 0, 0, 0);
      Dbms_Output.put_line(mygoods_info.goodsId'====='||picId);
        end loop;
      end;
  
0
1
分享到:
评论

相关推荐

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    Oracle_PL-SQL.rar_ORACLE PL_oracle_oracle sql_oracle 教程_pl sql

    这个“Oracle PL-SQL.rar”压缩包提供了针对初学者的Oracle PL/SQL语言教程,包含丰富的源代码示例和详细的解说,旨在帮助学习者快速掌握这一技能。 PL/SQL全称为Procedural Language/Structured Query Language,...

    《精通Oracle SQL 第2版》PDF版本下载.txt

    Oracle SQL不仅支持标准SQL语句,还提供了许多扩展功能,使其成为处理复杂数据查询的强大工具。 ### 《精通Oracle SQL 第2版》书籍概述 《精通Oracle SQL 第2版》是一本全面介绍Oracle SQL的高级指南,适合已经...

    oracle 9i pl/sql程序设计笔记

    通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...

    SQL(oracle).rar_oracle_oracle sql_oracle 总结_pl sql_sql

    `pl_sql`标签表明,这份资料可能包含了关于PL/SQL的基础和高级概念,比如块结构(DECLARE, BEGIN, END)、异常处理(TRY-CATCH)、游标处理、动态SQL以及如何调用Oracle数据库的内置函数和包。 `oracle_总结`标签...

    只能在PL/SQL中访问联合数组。

    虽然不能在SQL语句中直接使用联合数组,但可以通过PL/SQL将它们与数据库表格进行交互,例如通过游标将查询结果加载到联合数组,或者将联合数组的内容插入到数据库表格。 关于`add_months`函数,它是Oracle PL/SQL中...

    oracle pl sql 实例精解 源代码

    通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...

    Oracle PL/SQL程序设计(第5版)示例代码

    7. **索引和性能优化**:书中可能包含使用索引来提升查询性能的例子,以及如何分析和优化SQL语句以提高系统整体性能。 通过仔细研究这些示例代码,读者可以加深对Oracle PL/SQL的理解,学习如何有效地编写和调试PL/...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    oracle 中 pl/sql 只是学习方法

    4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...

    oracle pl/sql从入门到精通 配套源代码

    在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询数据,INSERT、UPDATE和DELETE用于修改数据。PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持...

    Oracle sql 源码 简单 全面 示例.rar

    这个压缩包里的示例很可能会涵盖这些主题,并通过具体的代码实例演示如何编写和使用这些SQL语句。学习和实践这些示例,你将能深入理解Oracle SQL的功能和灵活性,并能在实际项目中高效地使用它。记住,实践是掌握...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:与SQL语句一样,PL/SQL代码也应当添加注释,以帮助其他人理解其逻辑和功能。 - **示例**: ```plsql -- 计算员工的年度绩效奖金 DECLARE v_bonus NUMBER; BEGIN -- ... END; ``` ##### 3.6...

    ORACLE8 PLSQL程序设计_sql_code.zip_oracle pl/sql_pl sql code_pl/sql_

    6. **TABLES**: TABLES.SQL可能包含创建、修改和查询表的SQL语句,这在任何PL/SQL程序设计中都是基础。 7. **PF**: "PF"可能是"Procedure or Function"的简写,05-PF.SQL可能展示了如何定义和使用PL/SQL中的过程和...

    pl/sql及常见实用oracle语句学习

    1. **存储过程**:存储过程是一组预编译的SQL语句,可以作为一个单元执行,提高了代码复用和执行效率。它们在数据库中存储,可以接受参数,返回结果,并能执行复杂的业务逻辑。 2. **序列**:在Oracle中,序列是...

    oracle sql语句学习

    Oracle SQL语句是数据库管理与数据查询的重要工具,尤其在Oracle数据库系统中,掌握SQL的高效使用至关重要。这个"oracle sql语句学习"资源包显然旨在帮助初学者逐步提升到高级水平,通过全面的笔记资料,使用户能够...

    Oracle PL_SQL Language Pocket Reference, 5th Edition.2015.pdf

    - **执行PL/SQL函数**:介绍如何在SQL语句中调用PL/SQL函数,实现更复杂的逻辑。 - **动态SQL**:讲解如何使用PL/SQL执行动态构建的SQL语句。 ##### 6. 高级主题 - **编译选项**:讨论编译时可用的各种选项及其对...

    Oracle Sql 语句大全 培训内部资料

    7. **子查询**:嵌套在其他SQL语句中的查询,可以作为表达式的一部分,用于比较、过滤或计算。 8. **视图**:虚拟表,基于一个或多个表的查询结果。创建视图可以简化复杂的查询,提供安全性,并为用户提供定制的...

    Oracle常用pl_sql语句及示例.doc

    Oracle 常用 PL/SQL 语句及示例 在 Oracle 数据库中,PL/SQL 语言是非常重要的,因为它可以帮助开发者快速、高效地编写 SQL 语句。下面将对 Oracle 常用 PL/SQL 语句及示例进行详细的解释。 一、复制表结构 在...

Global site tag (gtag.js) - Google Analytics