Oracle存储过程中使用临时表
2016-12-03 00:00
411 查看
一、Oracle临时表知识 在Oracle中,临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而 TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除 TRANACTION临时表数据。
1) 会话级临时表 示例
1创建
Sql代码
create global temporary table temp_tbl(col_a varchar2(30))
on commit preserve rows
2插入数据
Sql代码
insert into temp_tbl values('test session table')
3提交
Sql代码
commit;
4查询
Sql代码
select *from temp_tbl
可以看到数据'test session table'记录还在。
结束SESSION,重新登录,再查询数据select *from temp_tbl,这时候记录已不存在,因为系统在结束SESSION时自动清除记录 。
2) 事务级临时表 示例
1创建
Sql代码
create global temporary table temp_tbl(col_a varchar2(30))
on commit delete rows
2插入数据
Sql代码
insert into temp_tbl values('test transaction table')
3提交
Sql代码
commit ;
4查询
Sql代码
select *from temp_tbl
这时候可以看到刚才插入的记录'test transaction table'已不存在了,因为提交时已经晴空了数据库;同样,如果不提交而直接结束SESSION,重新登录记录也不存在 。 二、在Oracle存储中使用临时表的一个例子 描述:档案册借阅时,需要把册拆分成详细的单据,拆分依据是册表中的BILLCODES(若干个用逗号分割的单据号)字段,临时表用于保存拆分出来的单据信息。拆分结束后直接返回临时表的数据。
Sql代码
create or replace package AMS_PKG as
type REFCURSORTYPE is REF CURSOR;
procedure SPLIT_VOLUMES (P_CORP_NAME IN varchar2,P_YEAR IN varchar2,P_MONTH IN varchar2,P_VOL_TYPE_CODE IN varchar2,P_BILL_NUM IN varchar2,P_VOLUME_NUM IN varchar2,P_AREA_CODES IN varchar2,P_QUERY_SQL out varchar2,P_OUTCURSOR out refCursorType);
end AMS_PKG;
/
CREATE OR REPLACE PACKAGE BODY "AMS_PKG" as
procedure SPLIT_VOLUMES(p_CORP_NAME IN varchar2, --查询条件,公司名称
p_YEAR IN varchar2, --查询条件,会计年度
p_MONTH IN varchar2, --查询条件,期间
p_VOL_TYPE_CODE IN varchar2, --查询条件,凭证类别编码
p_BILL_NUM IN varchar2, --查询条件,信息单号
p_VOLUME_NUM IN varchar2, --查询条件,册号
p_AREA_CODES IN varchar2, --查询条件,所在区域编码(产生册的区域),逗号分割。
--形式如 '12C01','12201','12D01','12E01','12601',存储过程中将使用in的方式进行过滤
p_QUERY_SQL out varchar2, --返回查询字符串
p_OutCursor out refCursorType --返回值
) is
v_sql varchar2(3000);
v_sql_WHERE varchar2(3000);
v_temp1 varchar2(300);
v_temp2 varchar2(300);
v_tempBILLCODES varchar2(3000);
V_CNT NUMBER(10,0);
V_VOLUME_ID NUMBER(10,0);
mycur refCursorType;
--CURSOR mycur( v varchar2) is
-- SELECT VOUCHTYPE,BILLCODES FROM PUB_VOLUMES where volumeid=v;
CURSOR mycur_split( val varchar2,splitMark varchar2) is
select * from table(myutil_split(val,splitMark));
begin
v_temp1 :='';
v_temp2 :='';
v_sql_WHERE := '';
v_tempBILLCODES := '';
V_CNT := 0;
V_VOLUME_ID := 0;--册表的系统编号
v_sql := 'SELECT VOLUMEID,VOUCHTYPE,BILLCODES FROM PUB_VOLUMES WHERE 1=1 ';
--dbms_output.put_line('p_BILL_NUM='||p_BILL_NUM);
IF (p_CORP_NAME IS NOT NULL AND LENGTH(p_CORP_NAME) >0) THEN --公司名称
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND CORPNAME LIKE ''%';
v_sql_WHERE := v_sql_WHERE || p_CORP_NAME;
v_sql_WHERE := v_sql_WHERE || '%''';
--dbms_output.put_line(p_BILL_NUM);
END;
END IF;
IF (p_YEAR IS NOT NULL AND LENGTH(p_YEAR) >0) THEN --会计年度
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND YEAR = ''';
v_sql_WHERE := v_sql_WHERE || p_YEAR;
v_sql_WHERE := v_sql_WHERE || '''';
--dbms_output.put_line(p_BILL_NUM);
END;
END IF;
IF (p_MONTH IS NOT NULL AND LENGTH(p_MONTH) >0) THEN --期间
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND MONTH = ''';
v_sql_WHERE := v_sql_WHERE || p_MONTH;
v_sql_WHERE := v_sql_WHERE || '''';
--dbms_output.put_line(p_BILL_NUM);
END;
END IF;
IF (p_VOL_TYPE_CODE IS NOT NULL AND LENGTH(p_VOL_TYPE_CODE) >0) THEN --凭证类别编码
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND VOUCHTYPE = ''';
v_sql_WHERE := v_sql_WHERE || p_VOL_TYPE_CODE;
v_sql_WHERE := v_sql_WHERE || '''';
--dbms_output.put_line(p_BILL_NUM);
END;
END IF;
IF (p_BILL_NUM IS NOT NULL AND LENGTH(p_BILL_NUM) >0) THEN --信息单号
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND BILLCODES LIKE ''%';
v_sql_WHERE := v_sql_WHERE || p_BILL_NUM;
v_sql_WHERE := v_sql_WHERE || '%''';
--dbms_output.put_line(p_BILL_NUM);
END;
END IF;
IF (p_VOLUME_NUM IS NOT NULL AND LENGTH(p_VOLUME_NUM) >0) THEN --册号
BEGIN
v_sql_WHERE := v_sql_WHERE || ' AND VOLUMENUM = 'color: blu
分享到:
在ORACLE存储过程中创建临时表 |
oracle 快速删除重复的记录
2010-10-08 09:52
浏览 1265
评论(0)
分类:数据库
相关推荐
参考知识库
Oracle知识库
3059 关注 | 252 收录
评论
发表评论
您还没有登录,请您登录后再发表评论
相关文章推荐
- ORACLE 在存储过程中使用临时表
- oracle存储过程中使用临时表
- Oracle存储过程中临时表的使用技巧
- c#中使用call调用oracle存储过程并获取out参数值
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- oracle 存储过程创建和使用举例
- sql server 存储过程中使用变量表,临时表的分析(续)
- Oracle 存储过程中使用cursor 游标遍历数据
- 在存储过程中使用临时表
- C#中使用Oracle 存储过程笔记 2004.11
- [VB.NET]在VB.NET 2005中,如何创建Oracle的存储过程,以及如何来使用存储过程语句?
- 临时表操作的一些见解(解决了我在存储过程中使用临时表的困惑)
- Oracle 存储过程中使用cursor 游标遍历数据
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- oracle 调试中使用到的存储过程
- 如何在Oracle中使用Java存储过程 (详解)
- mysql存储过程中使用临时表
- 如何在Oracle中使用Java存储过程 (详解)
- Oracle使用手册(三)---存储过程与触发器
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce