初次接触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.   

    如加上 GLOBAL  即 CREATE TEMPORARY TABLE t1(  COL1  VARCHAR2(10) ) 错误应为
    如加上 GLOBAL  即 CREATE GLOBAL  TEMPORARY TABLE t1(  COL1  VARCHAR2(10) )
      

  2.   

    1.
    begin
    Execute IMMEDIATE 'update t set cbr=''2'' where 1=2 ';
    end;
    /
      

  3.   

    2.
    没听说可以用CREATE TEMPORARY TABLE t1
    CREATE GLOBAL  TEMPORARY TABLE 是对的
      

  4.   

    2.补充
    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便已存在,下次再执行就会出错了
      

  5.   

    1、在sql_plus中执行
       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将截断表。