`
Seven.Q
  • 浏览: 11995 次
  • 性别: 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经验技巧

    临时表是一种特殊的表,只在当前会话或事务中存在。它们在数据密集型处理任务中特别有用,因为它们不占用永久表空间,且可以在事务提交后自动清理。文件中提到了两种临时表的行为模式: - `ON COMMIT PRESERVE ROWS`...

    oracle系统表详解(中文).docx

    7. **dba_temp_files**: 描述临时表空间的数据文件,用于存储临时结果和排序操作。 8. **dba_rollback_segs**: 管理回滚段(Rollback Segments),这些段存储了事务的回滚信息,以便在回滚操作时恢复到之前的状态。...

    疯狂SQL之魔兽争霸 .txt

    通过以上内容,我们可以看到SQL和Oracle在多个方面有着明显的差异,包括初始化参数、表空间管理、恢复模型的选择、数据备份策略、事务隔离级别的设定、约束的使用、临时表的创建以及数据类型转换等方面。了解这些...

    oracle sql项目开发中常见问题总结

    临时表分为两种类型:会话临时表(ON COMMIT PRESERVE ROWS)和事务临时表(ON COMMIT DELETE ROWS)。例如: ```sql CREATE GLOBAL TEMPORARY TABLE tablename (COLUMN LIST) ON COMMIT PRESERVE ROWS; ``` ...

    DB2编程序小小技巧

    - **概念**:DB2支持会话级和事务级的临时表。与Sybase和Oracle等数据库相比,DB2在临时表的处理上有所差异。 - **使用场景**:在多线程或多用户环境中,临时表可以用来存储临时结果集或中间计算结果。 - **注意事项...

    oracle之sqlFAQ

    - **事务临时表**(ON COMMIT DELETE ROWS):事务结束时,数据自动删除。 示例: ```sql CREATE GLOBAL TEMPORARY TABLE tablename (COLUMN LIST) ON COMMIT PRESERVE ROWS; ``` 7. **程序加密** Oracle ...

    DBA常用表总结

    USER视图与DBA视图类似,但是仅限于当前用户可见,主要用于查看和管理当前用户的对象和资源。 - **user_objects**:列出了当前用户所有的对象信息。 - **user_source**:提供了当前用户源代码的信息,如程序包、...

    ORACLE学习笔记

    6. SQL实用命令:`DESCRIBE`显示表结构,`SELECT * FROM dual`可用于测试连接,`SPOOL`将查询结果保存到文件,`SHOW`显示会话设置,`HELP`提供帮助信息,`COLUMN`、`TITLE`和`BTITLE`命令用于格式化输出,`PAGESIZE`...

    oracle常用的系统表说明

    ### Oracle常用的系统...以上列出的系统表和视图为数据库管理员提供了强大的工具,可以帮助他们监控和管理Oracle数据库的各个方面。通过熟练掌握这些系统表,DBA能够更有效地诊断问题、优化性能并确保系统的稳定运行。

    Oracle数据库方面Oracle数据库方面

    - **临时表空间**:主要用于存储临时数据,如排序操作等,在会话结束时会自动清除。 - **永久表空间**:用于存储持久化的数据,如表、索引等。 ### 其他高级特性 #### 17. 表函数 - **Table Functions**:在PL/SQL...

    ORACLE之常用FAQ V1.0(整理)

    临时表只存在于当前会话中,会话结束后自动删除。示例代码如下: ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( id NUMBER, name VARCHAR2(50) ) ON COMMIT DELETE ROWS; ``` **[Q]怎么样在PL/SQL中...

    y2复习题及答案快快抢啊,而且分还低,答案真实!!!

    - 使用`ON COMMIT PRESERVE ROWS`创建的临时表会在每次事务结束时保留表的结构和数据,直到用户会话结束。 ### 锁定表 - 当一个用户尝试锁定另一个用户正在使用的表时,如果另一个用户没有提交或回滚事务,则可能...

    oracle面试笔记[文].pdf

    16. **TEMPORARY与PERMANENT表空间**:TEMPORARY用于临时对象如排序,PERMANENT用于存储永久性数据对象。 17. **SYSTEM表空间**:创建数据库时默认的表空间,存储关键系统数据。 18. **CONNECT权限**:创建用户时...

    Oracle详细入门资料信息

    22. **全局临时表**:在会话期间存在,数据仅对创建会话可见,会话结束时数据自动删除。 以上是Oracle数据库管理和维护的基本概念,涵盖备份、恢复、性能优化、表结构管理等多个方面,对于初学者了解Oracle有很好的...

    oracle知识小结

    `IDENTIFIED BY`指定了用户的密码,`DEFAULT TABLESPACE`指定了用户的默认表空间,`TEMPORARY TABLESPACE`指定了临时表空间,`QUOTA`则定义了用户在特定表空间上的最大空间限制。 2. 权限管理: - 删除用户:使用...

    oracle维护常用命令.doc

    `CREATE USER 名称 IDENTIFIED BY 口令 DEFAULT TABLESPACE 默认表空间名 TEMPOARAY TABLESPACE 临时表空间名 QUOTA 15M ON 表空间名`用于创建新用户并分配默认表空间和临时表空间。 12. **删除用户**: `DROP ...

Global site tag (gtag.js) - Google Analytics