declare num number; str varchar2(50); begin select count(1) into num from table_name where...; if sql%notfound then str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ( COL1 VARCHAR2(10), COL2 NUMBER ) ON COMMIT PRESERVE(DELETE) ROWS '; execute immediate str; end if; end; /
置疑楼上,if sql%notfound then 这句会执行吗?
可能不执行了,这样吧,修改以下 set serveroutput on declare num number; begin .....; if num>1 then .....; end if; end; /
呵呵,知错就改,还是好同志嘛,哈哈。 beckhambobo(beckham) 不介意吧
if sql%notfound then 这句在书上看的是这样,但我从没有用成功过,几乎全市用 select count(*) into a from table 在判断a 的值 这种方式.
to beckhambobo(beckham)你的办法不错, 不过有几处不明白 sql%notfound 是什么意识,怎么每次都成功却找不到所建的表另外 select count(1) into num from table_name where...; 是否应该是 select count(1) into num from tab where tname='temp1'; 要不然怎么提示“..请说明table_name ...”还有 CREATE GLOBAL TEMPORARY TABLE TABLENAME 中 GLOBAL TEMPORARY 是什么意思,是不是字面上理解的 “全局临时表”如果建立成功它是否也为 执行此语句的 用户名 所属的表再有 ON COMMIT PRESERVE(DELETE) ROWS 是什么意思以上问题有空时指点一下 即使有些不懂,但看出你的方法按第2次的写法应该可行 过后一定给分
在Oracle8i中,可以创建以下两种临时表: 1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) ON COMMIT PRESERVE ROWS; 2。事务特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) ON COMMIT DELETE ROWS; CREATE GLOBAL TEMPORARY TABLE MyTempTable 所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。 下面两句话再贴一下: --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
num number;
str varchar2(50);
begin
select count(1) into num from table_name where...;
if sql%notfound then
str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME (
COL1 VARCHAR2(10),
COL2 NUMBER
) ON COMMIT PRESERVE(DELETE) ROWS ';
execute immediate str;
end if;
end;
/
set serveroutput on
declare
num number;
begin
.....;
if num>1 then
.....;
end if;
end;
/
select count(*) into a from table 在判断a 的值 这种方式.
不过有几处不明白
sql%notfound 是什么意识,怎么每次都成功却找不到所建的表另外
select count(1) into num from table_name where...;
是否应该是
select count(1) into num from tab where tname='temp1';
要不然怎么提示“..请说明table_name ...”还有 CREATE GLOBAL TEMPORARY TABLE TABLENAME 中
GLOBAL TEMPORARY 是什么意思,是不是字面上理解的
“全局临时表”如果建立成功它是否也为
执行此语句的 用户名 所属的表再有
ON COMMIT PRESERVE(DELETE) ROWS
是什么意思以上问题有空时指点一下
即使有些不懂,但看出你的方法按第2次的写法应该可行
过后一定给分
1。会话特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT PRESERVE ROWS; 2。事务特有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。
下面两句话再贴一下:
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
没及时查看贴子
我这就结贴子吧
感谢各位兄弟,尤其beckhambobo(beckham)