开发中遇到个常见的问题,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
相关推荐
临时表是一种特殊的表,只在当前会话或事务中存在。它们在数据密集型处理任务中特别有用,因为它们不占用永久表空间,且可以在事务提交后自动清理。文件中提到了两种临时表的行为模式: - `ON COMMIT PRESERVE ROWS`...
7. **dba_temp_files**: 描述临时表空间的数据文件,用于存储临时结果和排序操作。 8. **dba_rollback_segs**: 管理回滚段(Rollback Segments),这些段存储了事务的回滚信息,以便在回滚操作时恢复到之前的状态。...
通过以上内容,我们可以看到SQL和Oracle在多个方面有着明显的差异,包括初始化参数、表空间管理、恢复模型的选择、数据备份策略、事务隔离级别的设定、约束的使用、临时表的创建以及数据类型转换等方面。了解这些...
临时表分为两种类型:会话临时表(ON COMMIT PRESERVE ROWS)和事务临时表(ON COMMIT DELETE ROWS)。例如: ```sql CREATE GLOBAL TEMPORARY TABLE tablename (COLUMN LIST) ON COMMIT PRESERVE ROWS; ``` ...
- **概念**:DB2支持会话级和事务级的临时表。与Sybase和Oracle等数据库相比,DB2在临时表的处理上有所差异。 - **使用场景**:在多线程或多用户环境中,临时表可以用来存储临时结果集或中间计算结果。 - **注意事项...
- **事务临时表**(ON COMMIT DELETE ROWS):事务结束时,数据自动删除。 示例: ```sql CREATE GLOBAL TEMPORARY TABLE tablename (COLUMN LIST) ON COMMIT PRESERVE ROWS; ``` 7. **程序加密** Oracle ...
USER视图与DBA视图类似,但是仅限于当前用户可见,主要用于查看和管理当前用户的对象和资源。 - **user_objects**:列出了当前用户所有的对象信息。 - **user_source**:提供了当前用户源代码的信息,如程序包、...
6. SQL实用命令:`DESCRIBE`显示表结构,`SELECT * FROM dual`可用于测试连接,`SPOOL`将查询结果保存到文件,`SHOW`显示会话设置,`HELP`提供帮助信息,`COLUMN`、`TITLE`和`BTITLE`命令用于格式化输出,`PAGESIZE`...
### Oracle常用的系统...以上列出的系统表和视图为数据库管理员提供了强大的工具,可以帮助他们监控和管理Oracle数据库的各个方面。通过熟练掌握这些系统表,DBA能够更有效地诊断问题、优化性能并确保系统的稳定运行。
15. **创建临时表**:Oracle支持全局和本地临时表,如`CREATE GLOBAL TEMPORARY TABLE temp_table ...`。 16. **执行DDL语句**:在PL/SQL中,使用动态SQL,如`EXECUTE IMMEDIATE 'ALTER TABLE ...'`。 17. **获取...
- **临时表空间**:主要用于存储临时数据,如排序操作等,在会话结束时会自动清除。 - **永久表空间**:用于存储持久化的数据,如表、索引等。 ### 其他高级特性 #### 17. 表函数 - **Table Functions**:在PL/SQL...
临时表只存在于当前会话中,会话结束后自动删除。示例代码如下: ```sql CREATE GLOBAL TEMPORARY TABLE temp_table ( id NUMBER, name VARCHAR2(50) ) ON COMMIT DELETE ROWS; ``` **[Q]怎么样在PL/SQL中...
临时表是在会话期间存在的特殊表,它们仅在当前会话中可见。创建临时表可以使用`CREATE GLOBAL TEMPORARY TABLE`语句,这对于执行复杂的查询非常有用。 ##### 3.4 从数据表中取指定前几条记录 获取表中的前几条...
- 使用`ON COMMIT PRESERVE ROWS`创建的临时表会在每次事务结束时保留表的结构和数据,直到用户会话结束。 ### 锁定表 - 当一个用户尝试锁定另一个用户正在使用的表时,如果另一个用户没有提交或回滚事务,则可能...
### ORACLE 合辑知识点概览 #### 绑定变量 ...- 临时表仅在一个会话或事务期间存在。 **事务级临时表:** - 只在当前事务持续时间内可见。 **会话级临时表:** - 整个会话期间可见,但不跨会话...
16. **TEMPORARY与PERMANENT表空间**:TEMPORARY用于临时对象如排序,PERMANENT用于存储永久性数据对象。 17. **SYSTEM表空间**:创建数据库时默认的表空间,存储关键系统数据。 18. **CONNECT权限**:创建用户时...
22. **全局临时表**:在会话期间存在,数据仅对创建会话可见,会话结束时数据自动删除。 以上是Oracle数据库管理和维护的基本概念,涵盖备份、恢复、性能优化、表结构管理等多个方面,对于初学者了解Oracle有很好的...
`IDENTIFIED BY`指定了用户的密码,`DEFAULT TABLESPACE`指定了用户的默认表空间,`TEMPORARY TABLESPACE`指定了临时表空间,`QUOTA`则定义了用户在特定表空间上的最大空间限制。 2. 权限管理: - 删除用户:使用...
`CREATE USER 名称 IDENTIFIED BY 口令 DEFAULT TABLESPACE 默认表空间名 TEMPOARAY TABLESPACE 临时表空间名 QUOTA 15M ON 表空间名`用于创建新用户并分配默认表空间和临时表空间。 12. **删除用户**: `DROP ...