删除全局临时表(尝试在临时表上创建,更改或删除索引...)

时间:2015-09-16 05:06:19

标签: oracle stored-procedures plsql

我在post中提出了类似的问题,我发现我的问题不是编程问题,而是老板问题。我改变了方式所以我试图创建并删除一个全局临时表,它在提交保留行时。一体化程序。所以我知道会议不应该改变。但问题是,当我在表中没有插入数据时,drop工作正常,但是当我在表中插入一些数据时,它会向我显示以下异常:     尝试在已使用的临时表上创建,更改或删除索引

第一个程序:

select count(*) into int_var from user_tables where table_name = upper('v2d_temp');      
    if int_var = 1
    then
            execute immediate ('truncate table v2d_temp');
            execute immediate ('drop table v2d_temp');
    end if;
    DBMS_OUTPUT.PUT_LINE('drop v2d');
    -- create temp table
    execute immediate ('CREATE GLOBAL TEMPORARY TABLE v2d_temp (
            DEAL_ID               NUMBER,
            id           NUMBER,
            karpardaz  VARCHAR2(350),
            karpardaz_id number,
            GOOD_TYPE_GROUP       VARCHAR2(250 BYTE),
            GOOD_CODE             VARCHAR2(50 BYTE),
            GOOD_TITLE            VARCHAR2(250 BYTE),
            COUNT                 NUMBER,
            FACTOR_COUNT          NUMBER,
            GHABZ_COUNT           NUMBER,
            DEAL_NO               VARCHAR2(50 BYTE),
            DEAL_DATE             DATE,
            REQUEST_NO            VARCHAR2(50 BYTE),
            REQUEST_DATE          DATE,
            REQUEST_CLIENT        VARCHAR2(250 BYTE),
            STATUS                VARCHAR2(250 BYTE),
            TYPE                  VARCHAR2(250 BYTE),
            GEN_SECURITY_DATA_ID  NUMBER(10),
            MTDREPORT_ID          NUMBER
            ) ON COMMIT PRESERVE ROWS');
execute immediate ('drop table v2d_temp');

它可以正常工作,但是当我更改过程并插入一个插入查询时,这将显示错误:

select count(*) into int_var from user_tables where table_name = upper('v2d_temp');      
    if int_var = 1
    then
            execute immediate ('truncate table v2d_temp');
            execute immediate ('drop table v2d_temp');
    end if;
    DBMS_OUTPUT.PUT_LINE('drop v2d');
    -- create temp table
    execute immediate ('CREATE GLOBAL TEMPORARY TABLE v2d_temp (
            DEAL_ID               NUMBER,
            id           NUMBER,
            karpardaz  VARCHAR2(350),
            karpardaz_id number,
            GOOD_TYPE_GROUP       VARCHAR2(250 BYTE),
            GOOD_CODE             VARCHAR2(50 BYTE),
            GOOD_TITLE            VARCHAR2(250 BYTE),
            COUNT                 NUMBER,
            FACTOR_COUNT          NUMBER,
            GHABZ_COUNT           NUMBER,
            DEAL_NO               VARCHAR2(50 BYTE),
            DEAL_DATE             DATE,
            REQUEST_NO            VARCHAR2(50 BYTE),
            REQUEST_DATE          DATE,
            REQUEST_CLIENT        VARCHAR2(250 BYTE),
            STATUS                VARCHAR2(250 BYTE),
            TYPE                  VARCHAR2(250 BYTE),
            GEN_SECURITY_DATA_ID  NUMBER(10),
            MTDREPORT_ID          NUMBER
            ) ON COMMIT PRESERVE ROWS');
insert into v2d_temp values (
                            null,
                            1,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            null,
                            4,
                            null);
execute immediate ('drop table v2d_temp');

我不知道该怎么做或为什么会这样,我没有任何其他会话有一些私人数据,所以它就是你所看到的。我创建它,插入一些数据,然后我放弃它,但我无法理解它的错误或原因。

如果你想问我为什么要创建临时表并在最后删除它,只有一些商业原因,它们之间会有一些代码,但是现在我删除所有查询但结果是一样的并且它不依赖于查询之间的内容,当我只向表中插入一行时,我不能再删除它了。 我正在研究它几天,我不知道该怎么做。 任何帮助将不胜感激, 提前致谢

0 个答案:

没有答案