oracle创建临时表
- 格式:doc
- 大小:30.00 KB
- 文档页数:4
Oracle数据库是一种被广泛应用的关系型数据库管理系统,它提供了许多强大的功能来满足不同的数据库需求。
其中,创建临时表是在数据库开发和管理中经常会用到的功能之一。
本文将为大家介绍在Oracle数据库中创建临时表的方法,并提供一些注意事项和最佳实践。
一、什么是临时表在Oracle数据库中,临时表是一种特殊的表,它的数据仅在当前会话或事务中存在,并在会话或事务结束后自动删除。
临时表通常用于存储临时数据,或者在复杂的数据处理过程中起到缓冲的作用。
在Oracle中,临时表可以通过全局临时表和局部临时表两种方式来实现。
1. 全局临时表全局临时表是一种在数据库中存在的临时表,它对所有会话都可见,但表中的数据仅对创建它的会话可见。
全局临时表的数据在会话结束时自动删除,但表的结构保持不变,其他会话可以重复使用该表。
在Oracle中,创建全局临时表需要使用CREATE GLOBAL TEMPORARY TABLE语句,并在表名后添加ON COMMIT DELETE ROWS选项来指定表的删除规则。
2. 局部临时表局部临时表是一种在会话中存在的临时表,它对当前会话可见,但对其他会话不可见。
局部临时表的数据在当前会话结束时自动删除,表的结构也随之消失。
在Oracle中,创建局部临时表需要使用CREATETEMPORARY TABLE语句,并在表名后添加ON COMMIT DELETE ROWS选项来指定表的删除规则。
二、创建全局临时表的方法在Oracle数据库中,创建全局临时表可以通过以下步骤来完成:1. 使用CREATE GLOBAL TEMPORARY TABLE语句定义临时表的结构,例如:```sqlCREATE GLOBAL TEMPORARY TABLE temp_table(id NUMBER,name VARCHAR2(50))ON COMMIT DELETE ROWS;```2. 在创建表的也可以定义表的索引和约束等其他特性,以满足具体的需求。
oracle临时表的用法总结oracle临时表的用法总结1、前言目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。
当然在Oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建“临时表”。
我对临时表的理解:在Oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。
Oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)。
2、临时表的创建创建Oracle临时表,可以有两种类型的临时表:会话级的临时表事务级的临时表。
1)会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前不退出的情况下,临时表中的数据就还存在,而当你退出当前的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个登陆的时候是看不到另外一个中插入到临时表中的数据的。
即两个不同的所插入的数据是互不相干的。
当某一个退出之后临时表中的数据就被截断(truncatetable,即数据清空)了。
会话级的临时表创建方法:CreateGlobalTemporaryTableTable_Name(Col1Type1,Col2Type2...)OnCommitPreserveRows;举例:createglobaltemporarytableStudent(Stu_idNumber(5),Class_idNumber(5),Stu_NameVarchar2(8),Stu_Memovarchar2(200))onCommitPreserveRows;2)事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出的时候,事务级的临时表也会被自动截断)。
创建临时表空间CR EATETEMPO RARYTABLE SPACE test_tempTEMP FILE'D:\M yOrcl\orcl\test_temp01.db f'SI ZE 32MAUT OEXTE ND ONNEXT 32MMAXSI ZE 2048ME XTENT MANA GEMEN T LOC AL;创建用户表空间CREA TE TA BLESP ACE t est_d ataL OGGIN GDAT AFILE 'D:\MyOrc l\orc l\TES T_DAT A01.D BF' SIZE32M AUTOE XTEND ON NEXT32M M AXSIZ E 2048MEX TENTMANAG EMENT LOCA L;创建用户并制定表空间C REATE USER wjzIDENT IFIED BY t igerDEFAU LT TA BLESP ACE T EST_D ATAT EMPOR ARY T ABLES PACETEST_TEMP;给用户授予权限GRAN TCREAT E SES SION, CREA TE AN Y TAB LE, C REATE ANYVIEW,CREA TE AN Y IND EX, C REATE ANYPROCE DURE,AL TER A NY TA BLE,ALTER ANYPROCE DURE,DR OP AN Y TAB LE, D ROP A NY VI EW, D ROP A NY IN DEX,DROPANY P ROCED URE,SEL ECT A NY TA BLE,INSER T ANY TABL E, UP DATEANY T ABLE,DELE TE AN Y TAB LETO wj z;将ro le这个角色授与us ernam e,也就是说,使us ernam e这个用户可以管理和使用rol e所拥有的资源,前提是数据库内有role这个角色GRAN T rol e TOusern ame;查看所有用户SELE CT *FROMDBA_U SERS;SELE CT *FROMALL_U SERS;SELE CT *FROMUSER_USERS;查看用户系统权限SE LECT* FRO M DBA_SYS_PRIVS;SEL ECT * FROM USER_SYS_PRIVS;查看用户对象权限SE LECT* FRO M DBA_TAB_PRIVS;SEL ECT * FROM ALL_TAB_P RIVS;SELE CT *FROMUSER_TAB_P RIVS;查看所有用户SELEC T * F ROM D BA_RO LES;查看用户或角色所拥有的角色SELE CT *FROMDBA_R OLE_P RIVS;SELE CT *FROMUSER_ROLE_PRIVS;。
[转]关于oraclewithtableas创建临时表的用法示例1、with table as 相当于建个临时表(用于一个语句中某些中间结果放在临时表空间的SQL语句),Oracle 9i 新增WITH语法,可以将查询中的子查询命名,放到SELECT语句的最前面。
语法就是with tempname as (select ....)select ...例子:with t as (select * from emp where depno=10)select * from t where empno=xxxwithwd as (select did,arg(salary) 平均工资from work group by did),em as (select emp.*,w.salary from emp left join work w on emp.eid = w.eid)select * from wd,em where wd.did =em.did and wd.平均工资>em.salary;2、何时被清除临时表不都是会话结束就自动被PGA清除嘛! 但with as临时表是查询完成后就被清除了!23:48:58 SCOTT@orcl> with aa as(select * from dept)23:57:58 2 select * from aa;DEPTNO DNAME LOC---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON已用时间: 00: 00: 00.1223:58:06 SCOTT@orcl> select * from aa;select * from aa*第 1 行出现错误:ORA-00942: 表或视图不存在已用时间: 00: 00: 00.0223:58:14 SCOTT@orcl>3、就这一功能来说,子查询就可以达到啊,为什么要用with呢?用with有什么好处?都能写,但执行计划不同的。
在ORACLE存储过程中创建临时表在ORACLE存储过程中创建临时表存储过程⾥不能直接使⽤DDL语句,所以只能使⽤动态SQL语句来执⾏--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部⾏)--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
CREATE OR REPLACE PROCEDURE temptest(p_searchDate IN DATE)ISv_count INT;str varchar2(300);BEGINv_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)ISv_count INT;BEGINv_count := 0;IF p_Date IS NULL THENdbms_output.put_line('⽇期不能为空');ELSEIF P_Check = 1 THENinsert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalancewhere dtdate = p_Date);selectcount(sd.naccountid) into v_countfrom sett_subaccount ss,sett_account sa,sett_dailytest sdwhere sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountidAND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currencyand rownum < 2;COMMIT;p_countNum := v_count;dbms_output.put_line(p_countNum);END IF;IF P_Check = 2 THENinsert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalancewhere dtdate = p_Date);selectcount(sd.naccountid) into v_countfrom sett_cfsubaccount ss,sett_account sa,sett_dailytest sdwhere sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountidAND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currencyand rownum < 2;COMMIT;p_countNum := v_count;dbms_output.put_line(p_countNum); END IF;END IF;END PR_DAILYCHECK;。
oracle 临时表写法[Oracle 临时表写法]在Oracle数据库中,临时表是一种特殊的表,用于存储临时数据,并在会话结束后自动删除。
临时表可以帮助我们在处理大量数据或需要临时存储数据的情况下提高查询性能和简化代码逻辑。
本文将一步一步介绍如何创建和使用Oracle临时表。
第一步:创建临时表在Oracle中,我们可以使用CREATE GLOBAL TEMPORARY TABLE语句创建临时表。
语法如下:CREATE GLOBAL TEMPORARY TABLE table_name(column1 datatype,column2 datatype,...)ON COMMIT PRESERVE ROWS;临时表创建语句与常规表的创建语句类似,只是在CREATE语句末尾添加了"GLOBAL TEMPORARY"关键字,并使用"ON COMMIT PRESERVEROWS"选项来指定在会话结束后是否保留表的数据。
第二步:插入数据在临时表中插入数据的方式与常规表相同。
我们可以使用INSERT INTO 语句将数据插入到临时表中。
例如:INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);通过多次插入操作,我们可以向临时表中添加任意数量的数据。
第三步:使用临时表一旦我们创建并插入了数据到临时表中,就可以开始使用它了。
临时表可以作为查询的源表,也可以与常规表进行JOIN操作。
例如,我们可以使用SELECT语句从临时表中检索数据:SELECT * FROM table_name;这将返回临时表中所有数据的结果集。
我们还可以使用临时表进行JOIN操作,将其与常规表进行关联查询:SELECT t1.column1, t1.column2, ...FROM table_name_temp t1JOIN table_name_regular t2ON t1.id = t2.id;在上述示例中,我们使用了别名为t1和t2的表,将临时表和常规表进行了JOIN操作,以便根据一定的连接条件检索数据。
Oracle中临时表的使用余琦(2005-12-22)一、概念Oracle中的临时表有两种:1、事务级别的临时表按照如下方法创建:CREATE Global TEMPORARY TABLE TempTableName(bianhao varchar2(50) null) On Commit delete Rows它在事务结束的时候自动清空记录。
例如在一个存储过程或语句块里创建一个事务级的临时表,对该临时表的增加、删除、修改操作所产生的数据变化都会在调用commit命令后消失。
2、会话级的临时表按照如下方法创建:CREATE Global TEMPORARY TABLE TempTableName(bianhao varchar2(50) null) On Commit preserve Rows它在我们访问数据库时的一个会话结束后自动的清空。
连接oracle数据库的情况,当应用程序启动后,会话开始;当应用程序终止后,此会话结束。
跟我们在里所用到的系统全局变量类似,而不是跟session一样,浏览器关掉时就结束。
Windows Form程序连接oracle的情况,oracle把可执行文件启动到关闭这个过程当做一个会话。
当一个可执行文件启动后,第一次连接oracle时会话开始,可执行文件关闭时,会话结束。
二、使用方法不用担心多用户并行的问题,一个会话或事务中的临时表的数据从来不会和另外一个会话或事务中临时表的数据产生冲突。
但是我们在使用中需要注意以几点:1、事务级的临时表不能用做最后的游标返回,虽然这样的语句在数据库里测试是没有问题的,但是.net在访问的时候就会出错。
如果一定要以游标返回临时表中的数据,必须使用会话级的临时表。
2、所有的会话级的临时表不能动态去创建或删除,因为一旦创建了该临时表,除非此会话结束,否则是无法删除该临时表的。
所以我们需要在数据库初始化的时候建立系统中所有需要的会话级的临时表。
Oracle临时表用法什么是临时表?在Oracle数据库中,临时表是一种特殊的数据库对象,用于存储临时数据。
与普通表不同,临时表的数据仅在当前会话或事务中可见,并在会话结束后自动删除。
临时表可以提供高效的数据处理和查询功能,并可以减少对磁盘空间的需求。
为什么使用临时表?使用临时表有以下几个主要优势:1.提高性能:由于临时表存储在内存中而不是磁盘上,因此可以显著提高数据处理和查询的速度。
2.简化复杂查询:通过将中间结果存储在临时表中,可以简化复杂查询的编写和理解过程。
3.避免锁冲突:由于每个会话都有自己的临时表副本,在多用户环境下可以避免锁冲突问题。
4.节省空间:使用临时表可以避免创建大量的物理表来存储中间结果,从而节省数据库空间。
创建临时表要创建一个Oracle临时表,可以使用CREATE GLOBAL TEMPORARY TABLE语句。
与普通表不同,需要指定ON COMMIT选项来定义数据在提交事务后的处理方式。
常见的ON COMMIT选项有以下几种:•PRESERVE ROWS:在事务提交后保留临时表中的数据。
•DELETE ROWS:在事务提交后删除临时表中的数据。
•DROP:在事务提交后删除整个临时表。
下面是一个创建临时表的示例:CREATE GLOBAL TEMPORARY TABLE temp_table (id NUMBER,name VARCHAR2(50)) ON COMMIT PRESERVE ROWS;在上述示例中,我们创建了一个名为temp_table的临时表,包含id和name两个列,数据将在事务提交后保留。
使用临时表一旦创建了临时表,就可以像使用普通表一样对其进行操作。
可以使用INSERT语句向临时表插入数据,使用SELECT语句查询临时表中的数据,并可以使用UPDATE 和DELETE语句对数据进行修改和删除。
下面是一些常见的使用临时表的场景:1. 存储中间结果当需要多次查询同一组数据或进行复杂计算时,可以将中间结果存储在临时表中。
oracle global temporary table 赋权【原创版】目录1.Oracle 全局临时表的概念和作用2.临时表的创建和设置3.临时表的赋权方法4.临时表的优缺点5.临时表在实际应用中的案例正文一、Oracle 全局临时表的概念和作用在 Oracle 数据库中,全局临时表(Global Temporary Table)是一种特殊类型的表,它的数据在数据库重启后会被清空,因此在下一次数据库启动时,该表中的数据会重新为空。
全局临时表主要用于存储在多个用户和会话之间共享的数据,可以避免在多个会话中重复创建相同的数据,从而节省系统资源。
二、临时表的创建和设置要创建一个全局临时表,需要使用 CREATE GLOBAL TEMPORARY TABLE 语句。
例如:```CREATE GLOBAL TEMPORARY TABLE temp_table(id NUMBER,name VARCHAR2(50),age NUMBER);```创建临时表后,需要对其进行赋权,使其在当前用户下可用。
可以使用 GRANT 语句进行赋权,例如:```GRANT SELECT, INSERT, UPDATE, DELETE ON temp_table TO current_user;```三、临时表的赋权方法除了使用 GRANT 语句进行赋权外,还可以使用角色(Role)进行赋权。
首先创建一个角色,然后将该角色赋予当前用户。
例如:```CREATE ROLE temp_table_role ASSELECT, INSERT, UPDATE, DELETE ON temp_table;GRANT temp_table_role TO current_user;```四、临时表的优缺点1.优点:- 可以在多个用户和会话之间共享数据,节省系统资源。
- 可以避免在多个会话中重复创建相同的数据,减少数据冗余。
2.缺点:- 数据在数据库重启后会被清空,可能导致数据丢失。
Oracle 建立临时表空间通过在表空间中分配临时存储空间,Oracle能够使带有排序等操作的SQL语句获得更高的执行效率。
如果创建了专门的临时表空间,Oracle就可以不必在其他的表空间中为排序操作分配临时空间,这样不仅可以实现临时数据的集中化管理,而且还不会影响到其他表空间的使用效率。
在数据库中创建用户时必须为用户指定一个表空间作为临时表空间使用,该用户所生成的所有临时表数据都将存储在这个表空间中。
如果使用其他表空间作为临时表空间,这不仅会占用其中的存储空间,而且会在该表空间中生成许多存储碎片,从而影响整个数据库的性能。
因此,最好为数据库创建一个专门的临时表空间。
一个临时表空间可以被多个数据库用户共享使用。
在临时表空间中创建的段称为临时段。
Oracle只会为一个实例创建一个临时段,这个临时段被实例中所有的排序操作共享使用,但是临时段中的每一个区只能由一个事务使用。
另外,如果在数据库运行过程中经常有大量并发排序操作,那么为了提高排序性能,可以建立多个临时表空间。
建立临时表空间是使用CREATE TEMPORARY TABLESPACE命令完成的。
1.建立本地管理临时表空间建立本地管理临时表空间时,使用UNIFORM选项可以指定区尺寸。
需要注意,当建立临时表空间时,不能指定AUTOALLOCA TE选项。
例如,下面的语句在数据库中创建一个临时表空间TEMP01:SQL> create temporary tablespace temp012 tempfile 'd:\oracledata\temp01.dbf' size 10m3 extent management local4 uniform size 256k;表空间已创建。
上面创建的表空间其管理方式为本地化管理,并且区尺寸统一为256KB。
需要注意,本地化管理临时表空间不使用数据文件,而使用临时文件,也就是说,在创建临时表空间时,必须将表示数据文件的DA TAFILE改为表示临时文件的TEMPFILE。
Oracle Temporary Tables(Oracle 临时表)1. 建立临时表语法A.ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME-----(COUMNS …)-----AS SELECT … FROM TABLE…ON COMMIT DELETE ROWS;当前session发出commit/rollback命令,则该事务周期发生的所有数据自动被Oracle删除(Oracle truncate table)。
但不影响任何其他session的数据。
B.ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME-----(COUMNS …)-----AS SELECT … FROM TABLE…ON COMMIT PRESERVE ROWS;当前session结束(用户正常退出/ 用户不正常退出/ Oracle实例崩溃),Oracle对这个会话的中发生的数据进行删除(O racle truncate table)。
但不影响任何其他session的数据。
2. 特点说明A.临时表数据自动清空后,但是临时表的结构以及元数据还存储在用户的数据字典中。
表的定义对所有的会话可见B.临时表不需要DML锁C.可以索引临时表和在临时表基础上建立视图D.在临时表上的索引也是临时的,也是只对当前会话或者事务有效E.临时表可以拥有触发器F.可以用export和import工具导入导出临时表的定义,但是不能导出数据3. 使用技巧A.当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。
可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中B.程序执行过程中可能需要存放一些临时的数据,可以将这类数据放在临时表里非常方便C.存储过程中用到临时表:1> 在建立临时表前,应先加上对表名的判断Select count(*) into v_count from user_tables where table_name = ‘XXX’;If v_count=0 thenCreate global temporary table …在存储过程结束处,应该记得删除表execute immediate 'drop table t_temp';2> 若在存储过程中建的临时表为on commit delete rows。
在线重定义是指在不停止数据库服务的情况下对表、索引、视图等数据库对象进行结构修改。
这可以避免数据库服务中断,从而提高数据库的可利用性。
Oracle在线重定义原理如下:1. 创建临时表或索引在修改现有表或索引之前,Oracle会创建一个临时表或索引。
临时表或索引与现有表或索引具有相同的结构,但它们是独立的数据库对象。
2. 将数据从现有表或索引移动到临时表或索引Oracle将数据从现有表或索引移动到临时表或索引。
这可以通过各种方式完成,例如使用ALTER TABLE 语句或CREATE TABLE AS SELECT语句。
3. 修改现有表或索引在将数据移动到临时表或索引之后,Oracle可以修改现有表或索引。
这可以通过各种方式完成,例如使用ALTER TABLE语句或CREATE INDEX语句。
4. 将数据从临时表或索引移动到现有表或索引在修改完现有表或索引之后,Oracle将数据从临时表或索引移动到现有表或索引。
这可以通过各种方式完成,例如使用ALTER TABLE语句或INSERT INTO语句。
5. 删除临时表或索引在将数据移动到现有表或索引之后,Oracle会删除临时表或索引。
在线重定义是一种非常强大的功能,它可以帮助DBA在不停止数据库服务的情况下对数据库对象进行结构修改。
这可以避免数据库服务中断,从而提高数据库的可利用性。
在线重定义的优点包括:不需要停止数据库服务不会丢失数据可以修改表、索引、视图等各种类型的数据库对象可以同时对多个数据库对象进行重定义在线重定义的缺点包括:可能需要大量的时间和资源可能导致性能下降可能导致死锁或其他问题因此,在使用在线重定义之前,DBA需要仔细权衡其优点和缺点。
oracle 临时表用法Oracle临时表的用法临时表是Oracle数据库中用于临时存储数据的一种特殊表。
它在会话结束时自动销毁,不占用永久表空间。
通过使用临时表,可以在复杂的查询中临时存储中间结果或计算结果,以提高查询性能和效率。
使用临时表可以实现以下功能:1. 存储中间结果:在执行复杂的查询时,临时表可以用来存储中间结果,以便后续查询使用。
这样可以避免多次重复计算,提高查询效率。
2. 存储计算结果:如果需要对查询结果进行进一步计算或分析,可以将查询结果存储在临时表中,方便后续操作。
临时表可以根据需要创建索引,以进一步提高查询性能。
3. 存储大量数据:当需要处理大量数据时,临时表可以作为一种缓冲区,将数据存储在内存中,减少物理IO操作,提高查询速度。
创建临时表的语法如下:CREATE GLOBAL TEMPORARY TABLE table_name(column_name data_type,...)ON COMMIT {DELETE ROWS|PRESERVE ROWS};其中,table_name为临时表的名称,column_name为表的列名,data_type为列的数据类型。
ON COMMIT子句用于控制临时表的数据在事务提交之后的行为,DELETE ROWS表示在提交事务时删除所有数据,PRESERVE ROWS表示在提交事务时保留数据。
下面是一个简单的示例:CREATE GLOBAL TEMPORARY TABLE temp_table(id NUMBER,name VARCHAR2(50))ON COMMIT PRESERVE ROWS;INSERT INTO temp_table VALUES (1, 'John');INSERT INTO temp_table VALUES (2, 'Jane');SELECT * FROM temp_table;在这个示例中,我们创建了一个名为temp_table的临时表,并插入了两行数据。
//创建临时表空间create temporary tablespace jlcl_temptempfile'E:\app\jlcl_temp.dbf'size50mautoextend onnext50m maxsize20480mextent management local;//创建数据表空间create tablespace jlcl_dataloggingdatafile'E:\app\user_data.dbf'size50mautoextend onnext50m maxsize20480mextent management local;oracle 怎么备份或导入导出表?最佳答案exp/imp下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
数据导出:1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/manager@TEST file=d:\daochu.dmp full=y2 将数据库中system用户与sys用户的表导出exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)3 将数据库中的表table1 、table2导出exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)4 将数据库中的表table1中的字段filed1以"00"打头的数据导出exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
网页访问http://localhost:1158/emOracle 创建表空间SYS用户在CMD下以DBA身份登陆:在CMD中打sqlplus /nolog然后再conn / as sysdba// 分为四步//第1步:创建临时表空间create temporary tablespace user_temptempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50mautoextend onnext 50m maxsize 20480mextent management local;//第2步:创建数据表空间create tablespace test_dataloggingdatafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50mautoextend onnext 50m maxsize 20480mextent management local;//第3步:创建用户并指定表空间create user username identified by passworddefault tablespace user_datatemporary tablespace user_temp;//第4步:给用户授予权限grant connect,resource to username;---------------------------------------------------------------------------------//以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data表空间,这就不用在每创建一个对象给其指定表空间了撤权:revoke 权限... from 用户名;删除用户命令drop user user_name cascade;建立表空间CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500MUNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k删除表空间DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;一、建立表空间CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500MUNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k二、建立UNDO表空间CREATE UNDO TABLESPACE UNDOTBS02DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:ALTER SYSTEM SET undo_tablespace=UNDOTBS02;三、建立临时表空间CREATE TEMPORARY TABLESPACE temp_dataTEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M四、改变表空间状态1.使表空间脱机ALTER TABLESPACE game OFFLINE;如果是意外删除了数据文件,则必须带有RECOVER选项ALTER TABLESPACE game OFFLINE FOR RECOVER;2.使表空间联机ALTER TABLESPACE game ONLINE;3.使数据文件脱机ALTER DATABASE DATAFILE 3 OFFLINE;4.使数据文件联机ALTER DATABASE DATAFILE 3 ONLINE;5.使表空间只读ALTER TABLESPACE game READ ONLY;6.使表空间可读写ALTER TABLESPACE game READ WRITE;五、删除表空间DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;六、扩展表空间首先查看表空间的名字和所属文件select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_filesorder by tablespace_name;1.增加数据文件ALTER TABLESPACE gameADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;2.手动增加数据文件尺寸ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'RESIZE 4000M;3.设定数据文件自动扩展ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbfAUTOEXTEND ON NEXT 100MMAXSIZE 10000M;设定后查看表空间信息SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE CWHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ANDA.TABLESPACE_NAME=C.TABLESPACE。
oracle在8版本就开始提供了全局临时表它具有以下特点1 多用户操作的独立性对于使用同一张临时表的不同用户ORACLE都会分配一个独立的Temp Segment这样就避免了多个用户在对同一张临时表操作时发生交叉从而保证了多个用户操作的并发性和独立性2 数据的临时性既然是临时表顾名思义存放在该表中的数据是临时性的。
ORACLE根据你创建临时表时指定的参数On Commit Delete Rows / On Commit Preserve Rows自动将数据TRUNCATE掉。
1. 建立临时表语法AON COMMIT DELETE ROWS 定义了建立事务级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME -----COUMNS … ON COMMIT DELETE ROWS 当前session发出commit/rollback命令则该事务周期发生的所有数据自动被Oracle删除Oracle truncate table。
但不影响任何其他session的数据。
BON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法CREATE GLOBAL TEMPORARY TABLE TABLE_NAME -----COUMNS … ON COMMIT PRESERVE ROWS 当前session结束用户正常退出/ 用户不正常退出/ Oracle实例崩溃Oracle对这个会话的中发生的数据进行删除Oracle truncate table。
但不影响任何其他session的数据。
2. 特点说明A临时表数据自动清空后但是临时表的结构以及元数据还存储在用户的数据字典中。
表的定义对所有的会话可见B临时表不需要DML锁C可以索引临时表和在临时表基础上建立视图D在临时表上的索引也是临时的也是只对当前会话或者事务有效E临时表可以拥有触发器F可以用export和import工具导入导出临时表的定义但是不能导出数据3. 使用技巧A当某一个SQL语句关联的表在2张及以上并且和一些小表关联。
oracle临时表的写法在实际开发中,我们常常会遇到需要存储临时数据的情况。
Oracle 数据库提供了临时表这一功能,它允许我们在会话级别临时存储和处理数据。
本文将介绍Oracle临时表的写法及使用技巧。
1. 创建临时表要创建一个Oracle临时表,我们可以使用CREATE GLOBAL TEMPORARY TABLE语句。
临时表的结构与普通表类似,但数据的生命周期仅限于会话级别。
其语法如下:CREATE GLOBAL TEMPORARY TABLE 表名(列名1 数据类型,列名2 数据类型,...)ON COMMIT [DELETE|PRESERVE] ROWS;其中,ON COMMIT DELETE ROWS表示在事务提交时清空临时表的数据,而ON COMMIT PRESERVE ROWS则表示保留数据。
根据实际需求选择合适的选项。
2. 插入数据向Oracle临时表插入数据的方式与普通表相同,我们可以使用INSERT INTO语句。
例如:INSERT INTO 临时表名 (列名1, 列名2, ...)VALUES (值1, 值2, ...);需要注意的是,临时表的数据只在当前会话中可见,其他会话无法访问到临时表,这样可以确保数据的安全性和独立性。
3. 查询临时表数据要查询Oracle临时表的数据,我们可以使用SELECT语句。
例如:SELECT 列名1, 列名2, ...FROM 临时表名;临时表的查询语法与普通表相同,可以使用各种条件、排序和聚合函数进行数据筛选和处理。
临时表的查询结果只在当前会话生效,不会对其他会话产生影响。
4. 删除临时表当我们不再需要临时表时,可以使用DROP TABLE语句将其删除。
例如:DROP TABLE 临时表名;这样可以释放临时表所占用的存储空间,并且清理临时表的定义。
值得注意的是,临时表的数据在会话结束后会自动清空,不需要手动删除。
综上所述,Oracle临时表为我们提供了一种临时存储和处理数据的方法。
Oracle数据库临时表管理心得
我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,表中的数据是永远都存在的。
相对应的,在Oracle数据库中还有一种类型的表,叫做临时表。
这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。
当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清
除。
1、事务临时表的管理。
(1) 事务临时表的创建。
Oracle数据库根据临时表的性质不同,可以分为事务临时表与会话临时表。
事务临时表是指数据只有在当前事务内有效。
一般情况下,如果在创建数据表的时候,没有特殊指明这表是会话临时表的话,则该表默认为事务临时表。
我们可以以下面的语句创建事务临时表。
Create global temporary table Temp_user
(ID NUMBER(12) Primary key,name varchar2(10));
笔者建议:
这个创建临时表的语句中,虽然没有显性的指明该表是事务临时表,但是,默认的情况下,若没有指明是什么临时表的话,系统默认是事务临时表。
我们要创建事务临时表时,可以不指定关键字。
但是,这查看起来比较麻烦。
我建议,无论在建立什么临时表,都要利用具体的关键字来显形的指明,这大家看起来都方便。
一般可以利用ON COMMIT DELETE ROWS关键字来说明该表就是事务性的临时表,而不是会话性质
的临时表。
(2) 事务临时表数据的变化分析。
事务临时表的话,当事务结束的时候,就会清空这个事务临时表。
所以,当我们在数据库临时表中插入数据后,只要事务没有提交的话,该表中的数据就会存在。
但是,当事务提交以后,该表中的数据就会被删除。
而且,这个变化不会在重做日志中
显示。
具体事务临时表与会话临时表有什么区别,我们在介绍完会话临时表后会详细介
绍。
2、会话临时表的管理。
会话临时表,顾名思义,是指数据只在当前会话内有效的临时表。
关闭当前会话或者进行新的连接之后,数据表中的内容就会被清除。
那会话临时表跟事务临时表到底有什么区别呢?我们以一个实例来看其中的区别。
(1) 首先,创建一个会话临时表。
CREATE GLOBAL TEMPOPARY TABLE TEMP_USER
(ID NUMBER(12) Primary key,name varchar2(10))
ON COMMIT PRESERVE ROWS;
也就是说,会话临时表跟事务临时表的创建语法大致相同,只有最后的关键字有区别。
不过两个表虽然类似,但是其内部的处理机制还是有比较大的区别。
(2) 往该表中插入数据。
Insert into TEMP_USER values(1001,’victor’);
往数据库临时表中插入数据的方法,跟往普通表中插入数据的方法是一样的,都利用insert into语句进行操作。
该临时表的数据在会话结束之前都是存在这个表格
中的。
(3) 提交该事务并查询相关记录。
我们利用COMMIT的语句把该事务提交以后,再用SELECT查询语句进行查询。
我们知道,若该表是事务临时表的话,则当该事务结束以后,该表中的内容就会被删除。
但是,这是会话临时表,所以即使该事务提交了,但是,利用SELECT语句进行查询
时,仍然可以查到该条员工记录。
(4) 结束当前会话,并重新连接数据库。
关闭当前会话,从新连接到数据库后,再利用SELECT语句查询时,会有什么结果呢?此时,就查不到我们刚才插入的数据。
这也就是说,在关闭对话的时候,数据库系统已经把原有的数据删除了。
从以上的分析我们可以看中,会话临时表与事务临时表主要的差异就在于删除数据时机的不同。
事务性临时表是在事务提交的时候清除数据,而会话性临时表则是在关闭当前会话的时候清除临时表。
只要当前会话没有关闭,即使事务完成了,会话临时表中的数据仍然存在,不会被清除。
3、临时表管理需要注意的地方。
临时表相对与其他表来说,是一种比较特殊的表结构,但是,作用又比较大,Oracle数据库若没有这种表的话,还真是不行。
为了管理好这种特殊的表,我们需要
注意几个细节。
一是要注意临时表不能永久的保存数据。
只所以称为临时表,就是因为该表中的内容只是临时存在的。
当一个会话或者事务结束时,该表中的内容就会被自动清空。
所以,在临时表中,一般不要保存永久数据。
在实务中,有个不好的操作习惯,就是有些人在测试数据库的时候,喜欢把测试的数据放在临时数据表中。
其实,这是对Oralce临时数据表认识的错误。
若我们在数据库中,把要测试的数据,如销售定单的内容放在数据库的临时表中的话,则在其他功能中,如要测试销售定单日报表的功能时,就会找不到相关的定单内容。
因为离开特定的会话或者事务的话,临时表中的内容就会不存在了。
所以,Oralce数据库中所讲的临时表不是给我们来存储测试数据的。
二是临时表中的数据不会备份、恢复,对其的修改也不会有任何的日志信息。
若我们在操作数据库的时候,往数据库的临时表中存入了一些信息。
此时突然服务器出现当机。
此时,我们想通过数据库备份文件恢复数据库临时表中的内容,或者查看临时表的日志信息,都是无法实现的。
也就是说,当服务器以外死机重新启动后,临时表中的内容就会被清空。
在数据库的任何地方,如数据库备份文件或者日志信息中,都查不到在重新启动之前数据库临时表中保存了哪些内容,就好象根本没有对临时表
进行操作一样。
三是临时表表空间的管理。
临时表在Oracle数据库中,也是表的一种,其也有对应的表空间。
在创建临时表的时候,若我们不指定表空间的话,默认的表空间是SYSTEM。
对于临时表的表空间管理的话,我们需要注意一个小的细节。
若我们把临时表的表空间归属为SYSTEM的话,也就是说,在创建临时表的时候不具体指定具体的表空间,则这个默认的表空间是不能被删除的。
而若我们在创建临时表表空间的时候,指定为SYSTEM以外的表空间的话,则在不需要这表空间的时候,我们可以删除。
所以,为了后续管理的方便,笔者还是建议大家在创建临时表的时候,要指定表空间。
四是要注意一个问题,临时表只是数据是临时的,而表仍然是永久的。
也就是说,当一个会话结束或者一个事务完成时,其临时表中的数据虽然删除了,但是,临时表本身仍然是存在的。
也就是说。
Oracle数据库中的临时表表是全局的,只是数据是临时的。
这跟SQL Server数据库系统具有比较大的区别。
其实,这两个数据库在临时表的处理上有很大的不同,各有各的特色。
在以后的文章中,我会专门叙述这两种数据库在临时表管理机制上的不同,欢迎大家关注。
五是要注意Oracle数据库在给临时表填入数据的时候,不会对相应的记录加锁。
也就是说,当在临时表上执行DML语句的操作时,不会给记录加锁,也不会将数据的变化内容写到重做(REDO)日志中。
所以不能用临时表保存永久的数据,也不能对临时表进行共同的操作。
这是新手在管理数据库临时表经常会碰到的问题。
六是临时表与普通表之间不能相互转换。
在一般情况下,临时表建立后,该表就不能被转换成永久表。
所以,这也说明一个道理,利用临时表作为数据库设计时候的
测试表不合适。
这个临时表可能跟我们按字面意思理解的临时表有误,不是我们所认为的为了测试表结构而建立的临时表。
这一点是我们在刚开始接触ORACLE数据库时,
经常会犯的错误。