`

建立临时表和查找断号

 
阅读更多

把自定义的查询结果集放到临时表,然后操作该临时表的数据;


  type table_type is table of my_table%rowtype index by binary_integer;
  tmp_table table_type;--创建一个my_table(自己表)类型相同的临时集合

v_insert_num integer default 0;--成功插入的数量

 

--循环插入数据到临时表

       for x in ( SELECT Zyfxdm,Zyfxmc,Sfxtzfx,Xz,Pycc FROM XTGL_ZYFXXXSJZL a where a.zyfxdm=i_zyfxdmArr(i) )loop
         tmp_table(v_insert_num).Zyfxdm:=x.Zyfxdm;
         tmp_table(v_insert_num).Sfxtzfx:=x.Sfxtzfx;
         v_insert_num:=v_insert_num+1;

      end loop;

--然后查询这个临时表数据时(报错),因为这不是索引表,该方法行不通

select * from tmp_table

 

正确做法(方法之一):



1.先在Types里面定义临时表的结构;

2.存储过程中把数据插入该临时表;

 

 

CREATE OR REPLACE PROCEDURE jxgl_zwh(i_zphzj  in varchar2,
                                     o_zwh    out integer,
                                     o_errMsg out varchar2) IS
  /* 就业管理_展位号
  *  根据招聘会主键查找该招聘会回执企业中是否存在展位号数据,
  *  如果没有则返回1作为展位号,如果有数据则查找断位号
  
  i_zphzj:招聘会主键
  o_zwh:返回展位号
  o_errMsg:返回的错误信息
  */

  v_count_num  varchar2(10); --表数据
  v_count_zwh  varchar2(10); --断位号数
  arr_zwh      TYPE_Zwh_TABLE := TYPE_Zwh_TABLE();
  v_num integer default 1; --成功插入的数量

BEGIN

  for x in (SELECT zwh
              FROM jygl_chqyhz
             WHERE zphzj = i_zphzj
               and zwh is not null
             order by zwh) loop
    arr_zwh.extend;
    arr_zwh(v_num) := TYPE_Zwh(null);
    arr_zwh(v_num).zwh := x.zwh;
    v_num := v_num + 1;
  end loop;

  select count(1) into v_count_num from table(arr_zwh);
  SELECT COUNT(1)
    into v_count_zwh
    FROM (select n
            from (select rownum n
                    from table(arr_zwh) a, table(arr_zwh) b
                   where rownum < (select max(zwh) from table(arr_zwh))
                  minus
                  select zwh from table(arr_zwh))
           where n > 0
             and rownum = 1); --查询展位号有没有断号

  if v_count_num = 0 then
    --表中没有数据则从1开始
    o_zwh := 1;
  elsif v_count_num != 0 and v_count_zwh = 0 then
    --没有断号则查找最大值
    select (nvl2(max(zwh), max(zwh), 0) + 1)
      into o_zwh
      from table(arr_zwh);
  
  else
    --从1开始查找断号
    select n
      into o_zwh
      from (select rownum n
              from table(arr_zwh) a, table(arr_zwh) b
             where rownum < (select max(zwh) from table(arr_zwh))
            minus
            select zwh from table(arr_zwh))
     where n > 0
       and rownum = 1;
  end if;

exception
  when others then
    o_errMsg := o_errMsg || ':程序运行出现内部错误,请联系管理员。' ||
                dbms_utility.format_error_backtrace() || SQLCODE || '---' ||
                SQLERRM;
END jxgl_zwh;

 o_errMsg 中dbms_utility.format_error_backtrace()     --返回报错行数

                      SQLCODE    --报错代码

                      SQLERRM;   --报错问题

------------------------------------------------------------------------------------------------------------

查找断位号语句

select f
  from (select rownum f
          from test a, test b
         where rownum < (select max(id) from test)
        minus
        select id from test)
 where f > 0 and rownum=1;  --查找断号

 

--功能摘自:就业管理,招聘会管理

 

 

  • 大小: 55.8 KB
分享到:
评论

相关推荐

    IBM_AIX操作系统常见问题整理.pdf

    要确定AIX操作系统的安装时间,可以使用`oslevel`和`oslevel -s`命令来获取当前的系统级别和系统序列号,然后通过查询IBM的AIX版本发布日期表,来大致判断安装的时间范围。更精确的方法是在系统日志中查找安装过程的...

    云服务接口及协议文档

    临时数据表 - **表名**:`t_temp` - **表名**:`t_content` - **字段**: - `Id`:主键,自动增长。 - `c_name`:名称。 - `c_autor`:作者。 - `c_length`:长度。 - `c_hot`:阅读量。 - `c_status`:状态...

    PSIM中文使用说明

    在PSIM中建立仿真电路时,首先要确定电路的目标和功能,然后根据所需选择合适的元件并连接起来形成完整的电路模型。通过调整参数和设置初始条件来进行仿真测试。 **元器件参数说明书和格式** PSIM提供了详尽的元...

    计算机软件专业必备英语词汇

    - 字段,指数据库表中的列,用于存储特定类型的数据。 - 域,同上。 - 栏,通常指表格中的垂直划分部分。 - 场,指电磁学中的场的概念。 #### 54. **procedure** - 过程,指一系列按照特定顺序执行的步骤。 - 程序...

    易语言 茶凉专用模块

    模块名称:茶凉专用...参数 扇区号, 整数型 .参数 扇区内容, 字节集 .子程序 读内存长整数型, 长整数型, 公开, 从内存中读取长整数型数据,失败返回失败内容 .参数 进程ID, 整数型, , 进程ID .参数 地址, 整数型, , ...

Global site tag (gtag.js) - Google Analytics