能讲的具体点吗,用execute immediate 就没有创建好吗

解决方案 »

  1.   

    楼上的说行对,与sql server 的临时表是不同的,创建临时表时可以指定用户模式,功能比sql server好
      

  2.   

    CREATE OR REPLACE  PROCEDURE 
        "CLINIC"."ZXM_MZ_SEARCHPREMEDICLINICT_MZ"  (
    RC1  IN OUT Omwb_emulation.globalPkg.RCT1)
    AS
    mysql varchar2(1024);
    BEGIN

    mysql:='CREATE GLOBAL TEMPORARY TABLE TT_TEMP_BASEINFO_5 (
     MediCode VARCHAR2(12)  NOT NULL,
     MediName VARCHAR2(30)  NOT NULL,
     etalon VARCHAR2(30)  NOT NULL
     ) ON COMMIT PRESERVE ROWS ';
    execute immediate mysql;
    commit;

    INSERT INTO TT_TEMP_BASEINFO_5 (MediCode, MediName, etalon)
     values('ddf','dfdfdf','fdfddf');
    END ;
    /
      

  3.   

    把insert也变成动态执行的。
    动态SQL在执行时才检查语法,而非动态的SQL在编译时就检查语法,编译时TT_TEMP_BASEINFO_5还未创建,因此会报错。
      

  4.   

    创建一次应该是永久保留。
    先直接在SQLPLUS试一下INSERT INTO TT_TEMP_BASEINFO_5 (MediCode, MediName, etalon)
     values('ddf','dfdfdf','fdfddf')
    ;
    看看,是不是还报那个错,如果还报。
    那么或者是当前用户不是CLINIC,因此找不到那张表;或者是建表时出了错,表根本没建起来