Oracle中的临时表用法汇总

oracle|临时表

说明:下文中的一些说明和示例代码摘自CSDN,恕不一一指明出处,在此一并对相关作者表示感谢! 如果作者有异议,请来信说明

 
1 语法 在Oracle中,可以创建以下两种临时表:
1) 会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT PRESERVE ROWS;
2) 事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是如果insert 一条记录然后用别的连接登上去select,记录是空的。

--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

2 动态创建 
create or replace procedure pro_temp(v_col1 varchar2,v_col2 varchar2) as
v_num number;
begin
select count(*) into v_num from user_tables where table_name='T_TEMP';

--create temporary table
if v_num<1 then
execute immediate 'CREATE GLOBAL TEMPORARY TABLE T_TEMP (
COL1 VARCHAR2(10),
COL2 VARCHAR2(10)
) ON COMMIT delete ROWS';
end if;

--insert data
execute immediate 'insert into t_temp values('''||v_col1||''','''||v_col2||''')';

execute immediate 'select col1 from t_temp' into v_num;
dbms_output.put_line(v_num);
execute immediate 'delete from t_temp';
commit;
execute immediate 'drop table t_temp';
end pro_temp;

测试:

15:23:54 SQL> set serveroutput on
15:24:01 SQL> exec pro_temp('11','22');
11

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.79
15:24:08 SQL> desc t_temp;
ERROR:
ORA-04043: 对象 t_temp 不存在

 
3 特性和性能(与普通表和视图的比较) 临时表只在当前连接内有效临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用数据处理比较复杂的时候时表快,反之视图快点在仅仅查询数据的时候建议用游标: open cursor for 'sql clause';

欢迎补充!

 

时间: 2024-12-30 10:33:53

Oracle中的临时表用法汇总的相关文章

Oracle中自定义临时表的实现及其在Oracle Spatial中的应用

oracle|临时表 Oracle 临时表功能介绍:         Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时.每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的.         Oracle 的临时表分为事务型和会话型.         事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除.         会话型临时表指临时表中的数据在本次会话期间一直有效,

Oracle中创建临时表、外部表和分区表实例

临时表 在Oracle中,临时表是"静态"的,它与普通的数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的.相对于其他类型的表,临时表只有在用户实际向表中添加数据时,才会为其分配空间,并且分配的空间来自临时表空间.这就避免了与永久对象的数据争用存储空间. 创建临时表的语法如下: CREATE GLOBAL TEMPORARY TABLE table_name( column_name data_type,[column_name data_type,...] )ON CO

如何在Oracle中使用临时表解决表冲突

本文介绍一个Oracle里面使用临时表解决表冲突的例子,并附创建临时表的例子 平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作

oracle中distinct的用法详解_oracle

下面先来看看例子: table表 字段1     字段2    id        name    1           a    2           b    3           c    4           c    5           b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. 比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录. select distinct name from table 得到的结果

Oracle中使用临时表解决表冲突的例子

平台:windows 2000 server sp3 数据库:Oracle 9.0.1.1.1 现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为: SQL> exec sp_hyb_da_ryxx_dwbh_test('331028') BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END; *ERROR 位于第 1 行: ORA-02055: 分布式更新操作失效:要求回退 ORA-06502: PL/SQL: 数字或值错误 : 字符串

oracle中to_date详细用法示例(oracle日期格式转换)_oracle

TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) 复制代码 代码如下: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串  select to_char(sysdate,'yyyy')  as nowYear   from dual;   //获取时间的年  select to_char(sys

Oracle中sys_connect_by_path函数用法

sys_connect_by_path函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示 select level ,sys_connect_by_path( id , '/' ) from test start with pid= 1 connect by prior pid = id ; //父id=子id 正树型结构 子id=父id 倒树型结构 select level ,sys_connect_by_path( pid, '/' ) from tes

Oracle中rollup的用法

在047考题中有以下这么一道考题 11.View the Exhibit and examine the descriptions of ORDER_ITEMS and ORDERS tables. You want to display the CUSTOMER_ID, PRODUCT_ID, and total (UNIT_PRICE multiplied by QUANTITY) for the order placed. You also want to display the subt

C++中static的用法汇总

static的全部用法 要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样:我们通常声明一个变量: int a; string s; 其实就是: auto int a; auto string s; 而static变量的声明是: static int a; static string s; 这样似乎可以更有利于理解au