初次接触Or9I,请教
1、在sql_plus中执行
Execute IMMEDIATE 'update t set cbr=''2'' where 1=2 ; ';失败,为什么?
2、 我曾看到一个帖子
“
create [Global] Temporary Table ,加上[Global]就是全局的临时表(所有数据库连接会话都是可见的), 不则为私有的(在一个数据库连接会话期间有效)
”
但 CREATE TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; 执行失败,如加上 GLOBAL 即 CREATE TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; 就会成功,为什么? 下面的存储过程编译成功,执行失败,怎么回事?
CREATE OR REPLACE PROCEDURE Test as
BEGIN
execute IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; ';END;
1、在sql_plus中执行
Execute IMMEDIATE 'update t set cbr=''2'' where 1=2 ; ';失败,为什么?
2、 我曾看到一个帖子
“
create [Global] Temporary Table ,加上[Global]就是全局的临时表(所有数据库连接会话都是可见的), 不则为私有的(在一个数据库连接会话期间有效)
”
但 CREATE TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; 执行失败,如加上 GLOBAL 即 CREATE TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; 就会成功,为什么? 下面的存储过程编译成功,执行失败,怎么回事?
CREATE OR REPLACE PROCEDURE Test as
BEGIN
execute IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; ';END;
如加上 GLOBAL 即 CREATE GLOBAL TEMPORARY TABLE t1( COL1 VARCHAR2(10) )
begin
Execute IMMEDIATE 'update t set cbr=''2'' where 1=2 ';
end;
/
没听说可以用CREATE TEMPORARY TABLE t1
CREATE GLOBAL TEMPORARY TABLE 是对的
global temporary table 中的数据是只有当前会话能看到的,创建时有一个参数
on commit delete(preserve) rows
就是指在提交时 删除(保留) 数据但无论哪种情况,会话结束后,数据都会被删除3.
CREATE OR REPLACE PROCEDURE Test as
BEGIN
execute IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE t1( COL1 VARCHAR2(10) ) ; ';END;错误1:语句中间不能有分号(就是引号里面哪个)
错误2:temporary的意思仅指其中的数据是临时的,而表不会自动删除
这个过程执行成功一次后,表t1便已存在,下次再执行就会出错了
Execute IMMEDIATE 'update t set cbr=''2'' where 1=2';
2,
CREATE GLOBAL TEMPORARY TABLE TABLENAME (
COL1 VARCHAR2(10),
COL2 NUMBER
) ON COMMIT PRESERVE(DELETE) ROWS ;--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
---------------------------------------
在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将截断表。