`

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语句及示例.doc

    oracle常用pl_sql语句及示例

    Oracle PL SQL

    走进Oracle、认识PL/SQL、数据表的基本操作、表中数据的基本操作、数据的基本查询、查询中函数的使用、数据表的高级查询、索引及视图的使用、数据类型、流程控制、游标、存储过程和函数、触发器、异常处理、事务和锁...

    Oracle.Database.11g.PL_SQL.Programming

    通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...

    Oracle 入门文档2

    Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 Oracle笔记 八、PL/SQL跳转/判断/循环语句块 Oracle笔记 九、PL/SQL 游标的使用 Oracle笔记 十、PL/SQL存储过程 Oracle笔记 十一、...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、Oracle数据库管理员等相关数据库从业人员,也可以作为各大、中专院校相关专业师生的参考用书和相关培训机构的培训...

    Oracle常用pl_sql语句及示例

    有关Oracle的一些操作,这里有详细的介绍 你不需要系统的学习Oracle就会用它的语句 适合我这样的Oracle入门的人

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、Oracle数据库管理员等相关数据库从业人员,也可以作为各大、中专院校相关专业师生的参考用书和相关培训机构的培训...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...

    嵌入式SQL(E-SQL)简介

    4.3.1 ORACLE动态SQL语句的一些特点 72 4.3.2 使用动态SQL的四种方法 72 4.3.3 SQLDA 75 第五节INFORMIX的嵌入SQL/C语言 89 5.1 一个简单的入门例子 89 5.2 宿主变量 91 5.3 嵌入SQL的处理过程 96 5.4 动态SQL语言 ...

    数据库嵌入式SQL介绍与应用

    4.3.1 ORACLE动态SQL语句的一些特点 72 4.3.2 使用动态SQL的四种方法 72 4.3.3 SQLDA 75 第五节INFORMIX的嵌入SQL/C语言 89 5.1 一个简单的入门例子 89 5.2 宿主变量 91 5.3 嵌入SQL的处理过程 96 5.4 动态SQL语言 ...

    Oracle11gPLSQLProgramming

    通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...

    嵌入SQL资料

    4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言...

    PL/SQL 基础.doc

    1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言; 2) Oracle客户端工具访问Oracle服务器的操作语言; 3) Oracle对SQL的扩充; 4. PL/SQL的优缺点 优点:1) 结构化模块化编程,...

    ORACLE_PlSql-甲骨文学习笔记

    四、ORACLE PL/SQL简介 5 1 块结构 5 2 变量和类型 6 3 条件逻辑 6 4 循环 7 5 游标 8 №1声明一些变量,用于保存select语句的返回的列值 8 №2声明游标,并指定select语句 8 №3打开游标 8 №4从游标中获取记录 9 ...

    SQL21日自学通

    一个简单的PL/SQL 语句块395 又一个程序398 存储过程包和触发机制403 总结406 问与答407 校练场407 练习407 第19 天TRANSACT-SQL 简介408 目标408 TRANSACT-SQL 概貌408 对ANSI SQL 的扩展408 谁需要使用TRANSACT-...

    ESQLC资料(完全版)

    4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言96 5.4.1 ...

    Oracle11g从入门到精通2

    4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 ...

    oracle基础教程

    4.7 怎样分析SQL语句是否用到索引 52 4.8 怎样判断是否存在回滚段竞争 53 4.9 怎样手工跟踪函数/存储过程执行情况 54 4.10 多种业务使用同一数据库如何分配回滚段 54 4.11 怎样倒出、倒入文本数据 54 4.11.1 倒出 54...

Global site tag (gtag.js) - Google Analytics