`
Seven.Q
  • 浏览: 11253 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

会话与事务级临时表和dual表

阅读更多

开发中遇到个常见的问题,varchar2类型太短,要加长,clob吧!

支持modify字段类型,不支持clob(alter table FA_DR_TEMP  modify(a clob;)

那就正规修改:

--第一步:添加一个clob类型的字段
alter table FA_DR_TEMP add (a_bak clob);
--第二部:将原来字段的值拷贝到新建的clob字段
update FA_DR_TEMP set a_bak = a ;
--第三步:删除原来的字段
alter table FA_DR_TEMP drop column a;
--第四步:将新建的clob字段的名字修改为原来的字段的名字
alter table FA_DR_TEMP rename column a_bak to a;
--第五步:提交
commit;

 

报错:

ORA-14450:视图访问已经在使用的事物处理临时表

只能让业务人员等到第二天了

 

那就看下会话与事务级临时表,什么东东吧:

 

一、 会话临时表

--创建会话临时表
create global temporary table tmp_user_session(user_id int, user_name varchar2(20),user_email varchar2(30))
--这句表示 当事务提交时 保留数据
on commit preserve rows

--向临时表中插入数据
insert into tmp_user_session(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com')
insert into tmp_user_session(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')
commit
--查询 有数据
select * from tmp_user_session
--重新打开 一个sql窗口 再次查询 则无数据了 select * from tmp_user_session 说明此插入的数据 只为本窗口会话存在



二、创建事务临时表
--创建事务临时表
create global temporary table tmp_users_transaction (user_id int,user_name varchar2(20),user_email varchar2(30))
--这句表示 当事务提交时 删除数据
 on commit delete rows
 
 --向临时表中插入数据
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com');
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')

--查询 有数据
select * from tmp_users_transaction
--提交下语句 或者回滚事务 rollback  再次查询   select * from tmp_users_transaction  就没有数据了 因为事务临时表 就是在事务提交时 就数据清空了
commit;rollback;

--查看临时表的表空间,其实他们的表空间为空
  select table_name, tablespace_name
    from user_tables
   where table_name = 'T_USERS'
      or table_name = 'TMP_USERS_SESSION'
      or table_name = 'TMP_USERS_TRANSACTION'

临时表的应用场景
  1.大表分割
         众所周知,为表创建合适的索引可以在很大程度上提高数据查询的速度。但是当某个表的数据量相当大,例如数据量为亿级时,那么创建索引将会花费大量的时间,而且,查询大的索引表,与直接查询数据表相比,在性能上几乎没有任何优势,此时,一个常用的方法就是分割大表,例如:将大表分割为多个小的临时表,然后对这些小表进行相应操作,最后对所有查询结果进行综合处理。
  2.解决并行问题
         当多个进程同时对某张表进行操作时,往往会出现并行问题。
 3.作为数据缓存
    在程序段,可能需要对若干数据进行复杂运算。此时,可以创建一个临时表,并将这些数据存储在临时表中。因为可以像操作普通表一样操作临时表,这样,许多函数和sql语句都可以用来处理这些数据。

 

三、特殊表 dual

 

特殊表 dual 该表是每个数据库创建时默认生成的。该表仅有一列一行,在数据库开发中有着非常特殊的作用。
    1.分析dual表 执行
                select * from dual可以看出dual 只有一行一列。
    2. dual表的应用场景
              在oracle数据库中,dual表实际上是作为一个虚表的概念存在的。也就是说dual表存在的意义并非为了存储数据。更多的时候,dual表用来作为 from的源表。因为oracle的查询语句必须满足 select * from table name 语法格式,其中的from所指向的表是必须的,所以即使某些数据不属于任何表,也必须有一个强制的表名。dual表即可用做这个强制的虚表。
--查看dual表结构
select * from dual
--查询数据当前日期
select sysdate from dual
--计算结果
select 3*4-3 as results ,8-9 as plus from dual

分享到:
评论

相关推荐

    oracle临时表(事务级、会话级).docx

    oracle临时表(事务级、会话级).docx

    SpringBoot 整合Mybatis 创建临时表

    SpringBoot 整合Mybatis 创建临时表

    Oracle 临时表之临时表的应用问题

     临时表本质上是一种cache的表现形式,Oracle的临时表都是事先建好的,一旦用了临时表,存放的是和本会话相关的数据,没有人会傻乎乎地用临时表来保存本应该共享的数据。  with子查询实际上也是用了临时表,...

    Oracle存储过程中使用临时表

    Oracle存储过程中使用临时表 会话级临时表 事务级临时表

    Oracle 临时表用法

    很好的,经典.创建Oracle 临时表,可以有两种类型的临时表:会话级的临时表,事务级的临时表 。

    oracle11g创建临时表空间组

    oracle11gR2创建临时表空间组. 使用临时表空间组而非普通的...可以在数据库级指定多个默认临时表空间。  一个并行操作的并行服务器将有效地利用多个临时表空间。 一个用户在不同会话中可以同时使用多个临时表空间。

    MySQL中的两种临时表

    这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)。  内部临时表  内部临时表是一种特殊轻量级的临时表,用来进行性能优化。这种临时表会被MySQL自动创建并用来存储...

    对比Oracle临时表和SQL Server临时表的不同点

    Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解...Oracle临时表分为会话级临时表和事务级临时表。 会话级临时表是指临时表中的

    ORACLE中临时表

    Oracle 临时表功能介绍: Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。

    sql临时表相关介绍

    sql临时表相关介绍,可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_...

    oracle临时表操作学习资料

    在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清除。

    qq临时会话工具

    不加好友强制性临时会话 适合于网上宣传广告 宣传产品等宣传是一种网上营销手段

    易语言QQ临时会话

    易语言QQ临时会话源码,QQ临时会话

    Oracle 临时表用法汇总

    1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话...

    通过编程实现临时会话平台

    编程实现搭建一个可以临时会话平台的代码。部分关键代码。

    深度解析MySQL 5.7之临时表空间

    临时表 临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。 临时表有下面几种: ... 在MySQL里面没有这种临时表,必须利用会话级别的临时表

    qq临时会话器

    qq临时会话器

    MySQL两种临时表的用法详解

    这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)。 内部临时表 内部临时表是一种特殊轻量级的临时表,用来进行性能优化。这种临时表会被MySQL自动创建并用来存储某些...

    MYSQL 临时表用法总结

    MYSQL 临时表用法总结 1.背景 老项目最近被吐槽性能不行,经排查发现mysql占用cpu过高,梳理流程发现一些经常被使用的字段需要多张表关联之后可获取,于是想到了临时表; 2.临时表用法总结 将正常的CREATE TABLE语句...

    qq临时会话源码 e

    qq临时会话

Global site tag (gtag.js) - Google Analytics