把自定义的查询结果集放到临时表,然后操作该临时表的数据;
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; --查找断号
--功能摘自:就业管理,招聘会管理
相关推荐
SQL Server 中的临时表概念、创建和插入数据等问题 SQL Server 中的临时表概念是指名称以井号 (#) 开头的表,如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表有两种类型:本地临时表和...
现在,你可以通过调用`createTempTable`和`queryTempTable`方法来完成临时表的创建和查询。这个例子展示了如何在SpringBoot项目中整合Mybatis,创建并使用临时表进行数据操作。这种方式在处理一些临时性、会话级别的...
MySQL临时表是一种在会话范围内创建的特殊类型的表,它仅对当前会话可见,并在会话结束时自动删除。这种技术在处理复杂查询、中间数据处理或报表生成时非常有用,因为它允许用户将查询结果暂存起来,以便进一步处理...
当创建新用户时,可以为用户分配默认表空间和临时表空间,以便他们在该表空间中创建对象: ```sql CREATE USER my_user IDENTIFIED BY my_password DEFAULT TABLESPACE MY_DATA TEMPORARY TABLESPACE MY_TEMP; ...
- **索引和约束**:临时表可以创建索引和约束,但这些对象仅在会话或事务内有效。 - **存储空间**:虽然临时表在会话结束或事务提交后会被清理,但它们仍会占用内存和磁盘空间,因此需要合理使用,以避免资源浪费。 ...
本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...
oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。
临时表本质上是一种cache的表现形式,Oracle的临时表都是事先建好的,一旦用了临时表,存放的是和本会话相关的数据,没有人会傻乎乎地用临时表来保存本应该共享的数据。 with子查询实际上也是用了临时表,...
Oracle 中的临时表有两种:事务级别的临时表和会话级的临时表。事务级别的临时表在事务结束时自动清空记录,而会话级的临时表在会话结束时自动清空。 临时表的特点 临时表有以下特点: * 临时表可以在多用户并发...
在 MS SQL SERVER 中,临时表是以井号 (#) 或数学符号 (##) 开头的表名。临时表有两种类型:本地临时表和全局临时表。本地临时表的名称以单个数字符号 (#) 打头,仅对当前的用户连接是可见的。当用户从 Microsoft ...
根据存储位置的不同,可以将临时表分为两类:内存临时表和外存临时表。 - **内存临时表(in-memory)**:这种类型的临时表存储在内存中,因此读写速度较快,但不适合存储大量数据或大数据块。 - **外存临时表(on-...
Oracle 临时表空间满的问题需要通过查看当前数据库的默认临时表空间、查看当前临时表空间的大小、创建新的临时表空间、将新建的临时表空间设置为数据库的默认临时表空间、删除原来的临时表空间、创建新的临时表空间...
在 SQL Server 触发器中,系统自动会生成两张临时表,分别是 deleted 和 inserted 表。这些表可以理解为临时表,也可以认为是逻辑表或概念表。它们的表结构与原表是完全相同的。 Inserted 表和 Deleted 表的作用 ...
需要注意的是,与SQL Server和Sybase等其他数据库系统相比,Oracle中不应在运行时动态创建临时表,而应在应用程序安装时创建。DDL操作(如创建表)开销较大,应尽量避免在运行时执行。 总结来说,Oracle的临时表...
在这条语句中,`temp_tablespace`是你想要创建的临时表空间的名称,`tempfile_path.dbf`是你希望存放临时表空间数据文件的路径和文件名,`10M`是初始大小,`5M`是自动扩展增量,`50M`是最大尺寸。`EXTENT MANAGEMENT...
根据提供的标题、描述、标签及部分内容,我们可以详细探讨在Oracle PL/SQL中如何通过存储过程(Procedure)创建临时表,并且处理可能发生的异常情况。以下将深入解析此过程中的各个步骤及其背后的逻辑。 ### 一、...
默认情况下,如果没有明确指定,Oracle将创建的临时表视为事务临时表。为清晰起见,建议使用`ON COMMIT DELETE ROWS`关键字来标识事务临时表。 - **数据变化**:在事务临时表中插入的数据仅在当前事务内有效。事务...
### Oracle中临时表的创建与使用 #### 一、引言 在Oracle数据库环境中,当处理大规模数据时,经常会遇到性能瓶颈的问题。特别是在那些数据量达到百万级别的大型系统中,如何高效地管理数据成为了关键所在。为了...
例如,这里创建了三个临时表空间文件`tmp01grp01.dbf`、`tmp02grp01.dbf`和`tmp03grp01.dbf`。 - 可以使用`CREATE TEMPORARY TABLESPACE`语句创建这些表空间,并指定它们属于同一个表空间组`TBS_TEMPGROUP1`。示例...
临时表分为两种类型:本地临时表和全局临时表。 1. **本地临时表**:本地临时表的名称以单个井字号 (#) 开头,如 `#Tmp`。这些表只在其创建的会话中可见,不会被其他用户或会话访问。当创建本地临时表的会话结束时...