ORACLE中有临时表,表变量吗(SQLSERVER中),那用什么来代替啊

apple18 2006-04-17 08:16:04
SQLSERVER有临时表,表变量 ,ORACLE中有吗,没有的话用什么来代替啊
...全文
974 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
koskinen 2006-04-18
  • 打赏
  • 举报
回复
关注一下,顺便接分
icedut 2006-04-18
  • 打赏
  • 举报
回复
begin
p_ll();
end;

--正确执行
icedut 2006-04-18
  • 打赏
  • 举报
回复
test


CREATE OR REPLACE PROCEDURE p_ll IS
strsql varchar2(1000);
BEGIN
strsql :='CREATE GLOBAL TEMPORARY TABLE tmp_ll01 '
|| '(CTRL_ENT_ID VARCHAR2(100),COL_ENT_ID VARCHAR2(100),updateable INTEGER,ENABLED INTEGER,VISIBLE INTEGER'
|| ',INSERTABLE INTEGER,deleteable INTEGER,CHANGEABLE INTEGER) on commit preserve rows';

EXECUTE IMMEDIATE strsql;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END p_ll;



/
icedut 2006-04-18
  • 打赏
  • 举报
回复

是TEMPORARY
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;
/
apple18 2006-04-18
  • 打赏
  • 举报
回复
在存储过程begin end ;之间在create或 DECLARE global TEMPORARY TABLE TT,出错啊,

icedut 2006-04-17
  • 打赏
  • 举报
回复
zt
不同:
1. SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.
2. SQL SERVER临时表不存在类似ORACLE临时表 事务级别 上的功能.
3 SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.
4 SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
5 由于ORACLE不是一种 内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.所以ORACLE会保留临时表的定义直到用户DROP TABLE.
6 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯一信息删除相应的表中的数据. 这种方法给ORACLE带来了一定量的负载.
dp_555 2006-04-17
  • 打赏
  • 举报
回复
友情接分。。。
icedut 2006-04-17
  • 打赏
  • 举报
回复
zt
对全局临时表的总结

在临时表上的操作比在一般的表上的操作要快。因为:
1创建临时表不需要往编目表中插入条目,临时表的使用也不需要访问编目表,因此也没有对编目表的争用。
2仅有创建临时表的app才可存取临时表,所以在处理临时表时没有锁。
3如果指定NOT LOGGED选项,在处理临时表时不记日志。所以如果有仅在数据库的一个会话中使用的大量临时数据,把这些数据存入临时表能大大提高性能。
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));
在CONNECT RESET命令后,临时表不再存在。
建临时表是动态编译的,所以对临时表的使用也必须放在DECLARE CURSER 后面
CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) %
INSERT INTO SESSION.TT VALUES(P1, P2);
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT;
END;
END %

2。事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;

在Oracle中,全局临时表并不会删除,实际上你只需要建立一次,以后直接应用就行了,这与MS和Sybase不一样。实际上在断开数据库连接时,临时表中数据自动清空,不同的Session之间是隔离的,不许要当心相互影响,不过如果起用了连接共享的话,你要用On Commit delete rows使数据仅在事物内部有效。
  • 打赏
  • 举报
回复
有,CREATE OR REPLACE TEMPTABLE GOALBE 你去查查就知道了

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧