java 创建临时表 oracle_在ORACLE存储过程中创建临时表
在ORACLE存储过程中创建临时表
存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
CREATE OR REPLACE PROCEDURE temptest
(p_searchDate IN DATE)
IS
v_count INT;
str varchar2(300);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
NACCOUNTID NUMBER not null,
NSUBACCOUNTID NUMBER not null)
ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动态SQL语句来执行
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
END temptest;
上面建立一个临时表的存储过程
下面是执行一些操作,向临时表写数据。
CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
(
p_Date IN DATE,
p_Office IN INTEGER,
p_Currency IN INTEGER,
P_Check IN INTEGER,
p_countNum OUT INTEGER)
IS
v_count INT;
BEGIN
v_count := 0;
IF p_Date IS NULL THEN
dbms_output.put_line('日期不能为空');
ELSE
IF P_Check = 1 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
IF P_Check = 2 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
END IF;
END PR_DAILYCHECK;
需要创建一个临时表,请举例说明,谢谢!
---------------------------------------------------------------
是TEMPORARY
CREATE GLOBAL TEMPORARY TABLE flight_schedule (
startdate DATE,
enddate DATE,
cost NUMBER)
---------------------------------------------------------------
create proecdure name_pro
as
str varchar2(100);
begin
str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON
COMMIT PRESERVE ROWS as select * from
others_table';
execute immediate str;
end;
/
可以把临时表指定为事务相关(默认)或者是会话相关:
ON COMMIT DELETE ROWS:指定临时表是事务相关的,Oracle在每次提交后截断表。
ON COMMIT PRESERVE ROWS:指定临时表是会话相关的,Oracle在会话中止后截断表。
=================
可以创建以下两种临时表:
1。会话特有的临时表
CREATE GLOBAL TEMPORARY ()
ON COMMIT PRESERVE ROWS;
========
对全局临时表的总结
在临时表上的操作比在一般的表上的操作要快。因为:
1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。
2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。
3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));
在CONNECT RESET命令后,临时表不再存在。
建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面
CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) %
INSERT INTO SESSION.TT VALUES(P1, P2);
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT;
END;
END %
2。事务特有的临时表
CREATE GLOBAL TEMPORARY ()
ON COMMIT DELETE ROWS;
在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时
表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit
delete rows使数据仅在事物内部有效。
3建立临时表
临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.
建立方法:
1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT DELETE ROWS;
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');
SQL> insert into permernate values(1);
SQL> commit;
SQL> select * from admin_work_area;
SQL> select * from permernate;
A
1
2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT PRESERVE ROWS;
EXAMPLE:
会话1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');
SQL> commit;
SQL> select * from permernate;
A
----------
1
2
SQL> select * from admin_work_area;
STARTDATE ENDDATE CLASS
---------- ---------- --------------------
17-1ÔÂ -03 17-1ÔÂ -03 session temperary
会话2:
SQL> select * from permernate;
A
----------
1
2
SQL> select * from admin_work_area;
未选择行.
会话2看不见会话1中临时表的数据.
posted on 2009-02-26 17:29 SIMONE 阅读(7005) 评论(0) 编辑 收藏 所属分类: oracle
java 创建临时表 oracle_在ORACLE存储过程中创建临时表相关推荐
- oracle临时表教程,在oracle存储过程中创建临时表
在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or ...
- mysql 存储过程临时表_在MySQL存储过程中创建的临时表的范围
问题撤销!当我拼写正确的一切,问题消失了! 我有一个MySQL存储过程创建一个临时表.当我从mysql提示符调用过程时,它似乎运行成功,但是如果我从临时表中选择COUNT(*),我会收到一个错误,表示 ...
- 在oracle存储过程中创建临时表
在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: [sql] ...
- mysql语句创建临时表并存入数据_mysql实例:在存储过程中创建临时表并储存数据...
在mysql存储过程中创建临时表,并保存数据到该表,然后根据存储过程调用的例子. 是学习mysql存储过程的好例子,值得参考. 代码: mysql> mysql> CREATE TABLE ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Oracle数据库中的临时表
概述 写这篇文章的起因,是由于客户存在这样的场景.每次登录时,需要创建一些临时表(业务上临时),然后插入一些数据,返回到客户端,然后删除这些表.最初用户用的是普通表,带来很大的开销.后来改为Globa ...
- oracle存储过程ddl,Oracle 存储过程中的DDL语句
Oracle的存储过程,是我们使用数据库应用开发的重要工具手段.在存储过程中,我们大部分应用场景都是使用DML语句进行数据增删改操作.本篇中,我们一起探讨一下数据定义语句DDL在存储过程中使用的细节和 ...
- oracle数据存储过程 中的循环 for 拼接字符串,oracle存储过程中使用字符串拼接
1.使用拼接符号"||" v_sql := 'SELECT * FROM UserInfo WHERE ISDELETED = 0 AND ACCOUNT =''' || vAcc ...
- 布尔类型(boolean)在oracle存储过程中支持情况
文章目录 1.布尔类型在oracle存储过程中支持情况 (1)布尔类型在过程.函数.包中的支持情况 (2)布尔类型与其他类型的兼容情况 (3)布尔类型作为cast函数参数情况 (4)存储过程case- ...
最新文章
- Python_基础_1
- python创建tcp socket_Python Socket如何建立TCP连接
- 【万里征程——Windows App开发】控件大集合1
- Qt笔记-窗口程序在任务栏中隐藏及永久置顶
- 一页纸API快捷免费高速api接口
- rust投递箱连接箱子_拆了的快递包装丢哪里?闵行试行24小时开放的网购包装回收箱...
- linux下nginx的基本使用
- 什么是机器学习?(上)
- 函数-在函数里修改列表数据
- FBreader问题记录及多端同步心得开篇
- echarts 横向柱状图
- AUTOSAR入门介绍
- day05数据类型(上)
- 【阵列信号处理】DOA估计之MUSIC算法
- c语言的位取反和按位异或
- 相似度80%,Apache 孵化项目 StreamPark被公然抄袭!
- 量变才会质变,质变最后才会解决问题
- 驱动开发 LED灯驱动
- 创建数据库表格的方法
- 牛客网 2018校招真题 京东 回文
热门文章
- 时间控件date-picker 时间差计算
- 真正的精英程序员是什么样的?共勉!
- cocos creator - 龙骨动画的适配
- 乱码(一): 北京西直门迷路与乱码困惑
- 关闭WordPress站内容搜,杜绝违禁词在站内恶意搜索
- 文件服务器主机名访问,如何通过主机名访问共享文件
- vue-cli 4.0安装及项目搭建
- t972和鸿蒙818,电视芯片学问大 鸿鹄818与Amlogic T972哪家强
- 畅想 AI 未来 | CDA经管之家·人工智能地图2.0发布会圆满落幕
- adb 报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:65533