create proecdure name_pro as str varchar2(100); begin str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON COMMIT PRESERVE ROWS as select * from others_table'; execute immediate str; end; / 深入研究:
首先是创建临时表的语法: CREATE GLOBAL TEMPORARY TABLE table "(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}] [, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")" ON COMMIT {DELETE | PRESERVE } ROWS ; 在Oracle中,可以创建以下两种临时表: 1) 会话特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT PRESERVE ROWS; 2) 事务特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT DELETE ROWS; CREATE GLOBAL TEMPORARY TABLE MyTempTable 所建的临时表虽然是存在的,但是如果insert 一条记录然后用别的连接登上去select,记录是空的。 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
create global temporary table test(name varhcar2(20));
临时表:只在会话期间或在事务处理期间存在的表.
临时表在插入数据时,动态分配空间
create global temporary table temp_dept
(dno number,
dname varchar2(10))
on commit delete rows; insert into temp_dept values(10,'ABC');
commit;
select * from temp_dept; --无数据显示,commit之后数据自动清除掉 on commit preserve rows:在会话期间表一直可以存在(保留数据)
on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据)
(dno number,
dname varchar2(10))
--事务级的 事务完成数据自动清空SQL> edi
已写入 file afiedt.buf 1 create global temporary table test_tmp2
2 (ip varchar2(40),host varchar2(50))
3* on commit delete rows
SQL> /表已创建。
--会话级的 退出所属会话数据自动清空
SQL> create global temporary table test_tmp
2 (id varchar2(10), name varchar2(10))
3 on commit preserve rows
4 /表已创建。
引用楼主 heng841118 的回复:
oracal 临时表怎么创建
SQL code--事务级的 事务完成数据自动清空SQL> edi
已写入 file afiedt.buf 1 create global temporary table test_tmp2
2 (ip varchar2(40),host varchar2(50))
3*……
[/Quote
正解
CREATE GLOBAL TEMPORARY TABLE flight_schedule (
startdate DATE,
enddate DATE,
cost NUMBER)
---------------------------------------------------------------
create proecdure name_pro
as
str varchar2(100);
begin
str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON COMMIT PRESERVE ROWS as select * from others_table';
execute immediate str;
end;
/
深入研究:
首先是创建临时表的语法: CREATE GLOBAL TEMPORARY TABLE table
"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}]
[, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"
ON COMMIT {DELETE | PRESERVE } ROWS ;
在Oracle中,可以创建以下两种临时表: 1) 会话特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT PRESERVE ROWS; 2) 事务特有的临时表 CREATE GLOBAL TEMPORARY ( ) ON COMMIT DELETE ROWS; CREATE GLOBAL TEMPORARY TABLE MyTempTable 所建的临时表虽然是存在的,但是如果insert 一条记录然后用别的连接登上去select,记录是空的。 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。