为什么我用临时表会报Can't reopen table: 'tmp_query_full_item_inv'
而用非临时表就可以呢?
帮帮忙啊
-- CREATE TEMPORARY TABLE if not exists tmp_query_full_item_inv
CREATE TABLE if not exists tmp_query_full_item_inv 
(
   id               varchar(100) NOT NULL,
   account_oid      varchar(36),
   bu_id            varchar(20),
   parter_bu_oid    varchar(36),
   parter_bu_id     varchar(20),
   parter_bu_name   varchar(60),
   item_category    varchar(10),
   item_bu_oid      varchar(36),
   item_bu_id       varchar(20),
   item_bu_name     varchar(60),
   item_rpt_id      varchar(20),
   supplier_oid     varchar(36),
   supplier_id      varchar(20),
   supplier_name    varchar(60),
   begin_qty        double(12, 3),
   rn_qty           double(12, 3),
   un_rn_qty        double(12, 3),
   dn_qty           double(12, 3),
   lock_qty         double(12, 3),
   inv_adj_qty      double(12, 3),
   entity_tsf_qty   double(12, 3),
   pending_tsf_qty  double(12, 3),
   end_qty          double(12, 3),
   inv_days         double(12, 3),
   avg_qty          double(12, 3),
   order_qty_1      double(12, 3),
   order_qty_2      double(12, 3),
   PRIMARY KEY  (`id`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
truncate table tmp_query_full_item_inv;

if errorCode=0 then
-- Begining Qty --
call SP_RP_GET_BEGINQTY(accountOid,buId,startDate,endDate,
entityOid,custCategory,itemBuId,supplierId,pageSize,
currentPage,recordCount,errorCode,errorDesc);
if errorCode=0 then 
-- DN --
insert into tmp_query_full_item_inv
(
   id,
   account_oid      ,
   bu_id            ,
   parter_bu_oid    ,
   parter_bu_id     ,
   parter_bu_name   ,
   item_category    ,
   item_bu_oid      ,
   item_bu_id       ,
   item_bu_name     ,
   item_rpt_id      ,
   supplier_oid     ,
   supplier_id      ,
   supplier_name    ,
   begin_qty        ,
   rn_qty           ,
   un_rn_qty        ,
   dn_qty           ,
   lock_qty         ,
   inv_adj_qty      ,
   entity_tsf_qty   ,
   pending_tsf_qty  ,
   end_qty          ,
   inv_days         ,
   avg_qty          ,
   order_qty_1      ,
   order_qty_2      
)
(
select distinct(id),
   account_oid      ,
   bu_id            ,
   parter_bu_oid    ,
   parter_bu_id     ,
   parter_bu_name   ,
   item_category    ,
   item_bu_oid      ,
   item_bu_id       ,
   item_bu_name     ,
   item_rpt_id      ,
   supplier_oid     ,
   supplier_id      ,
   supplier_name    ,
   begin_qty        ,
   rn_qty           ,
   un_rn_qty        ,
   0 as qty           ,
   lock_qty         ,
   inv_adj_qty      ,
   entity_tsf_qty   ,
   pending_tsf_qty  ,
   end_qty          ,
   inv_days         ,
   avg_qty          ,
   order_qty_1      ,
   order_qty_2 from
  (select concat(parter.parter_bu_oid,',',item.item_bu_oid) as id,
accountOid as account_oid,
buId as bu_id,
parter.parter_bu_oid,
parter.parter_bu_id, 
parter.parter_bu_name, 
item.category1 as item_category, 
item.item_bu_oid,
item.item_bu_id, 
item.item_bu_name, 
item.item_rpt_id, 
supplier.parter_bu_oid as supplier_oid,
supplier.parter_bu_id as supplier_id, 
supplier.parter_bu_name as supplier_name, 
0 as begin_qty        ,
        0 as rn_qty           ,
        0 as un_rn_qty        ,
        sum(dndetail.shipped_qty) as qty,
        0 as lock_qty         ,
        0 as inv_adj_qty      ,
        0 as entity_tsf_qty   ,
        0 as pending_tsf_qty  ,
        0 as end_qty          ,
        0 as inv_days         ,
        0 as avg_qty          ,
        0 as order_qty_1      ,
        0 as order_qty_2      
from so_dn_head dnhead, so_dn_detail dndetail, v_mf_item_bu item, v_mf_parter_bu parter, v_mf_parter_bu supplier
where if(startDate='' or startDate is null,true,dnhead.dispatch_date>=startDate) 
and if(endDate='' or endDate is null,true,dnhead.dispatch_date<=endDate)
and dnhead.so_dn_head_oid=dndetail.so_dn_head_oid
and dndetail.last_status in ('140', '190')
and dnhead.bu_id=buId
and dndetail.item_bu_oid=item.item_bu_oid
and if(custCategory='' or custCategory is null,true,item.category1=custCategory)
and parter.parter_bu_oid=dndetail.entity_bu_oid
and (dndetail.pending_ind=0 or dndetail.pending_ind is null)
and item.pri_supplier_oid=supplier.parter_bu_oid
and if(entityOid='' or entityOid is null,true,if(entityOid=selectSupplier,parter.parter_type='S',dndetail.entity_bu_oid=entityOid))
and if(supplierId='' or supplierId is null,true,item.pri_supplier_oid=supplierId)
and if(itemBuId='' or itemBuId is null,true,item.item_bu_id=itemBuId)
and if(itemBuId='' or itemBuId is null,true,item.bu_id=buId)
group by dndetail.entity_bu_oid, dndetail.item_bu_oid
having qty is not null and qty <> 0)T
where id not in (select id from tmp_query_full_item_inv)
);
update tmp_query_full_item_inv a, (select concat(parter.parter_bu_oid,',',item.item_bu_oid) as id,
accountOid as account_oid,
buId as bu_id,
parter.parter_bu_oid,
parter.parter_bu_id, 
parter.parter_bu_name, 
item.category1 as item_category, 
item.item_bu_oid,
item.item_bu_id, 
item.item_bu_name, 
item.item_rpt_id, 
supplier.parter_bu_oid as supplier_oid,
supplier.parter_bu_id as supplier_id, 
supplier.parter_bu_name as supplier_name, 
0 as begin_qty        ,
        0 as rn_qty           ,
        0 as un_rn_qty        ,
        sum(dndetail.shipped_qty) as qty,
        0 as lock_qty         ,
        0 as inv_adj_qty      ,
        0 as entity_tsf_qty   ,
        0 as pending_tsf_qty  ,
        0 as end_qty          ,
        0 as inv_days         ,
        0 as avg_qty          ,
        0 as order_qty_1      ,
        0 as order_qty_2      
from so_dn_head dnhead, so_dn_detail dndetail, v_mf_item_bu item, v_mf_parter_bu parter, v_mf_parter_bu supplier
where if(startDate='' or startDate is null,true,dnhead.dispatch_date>=startDate) 
and if(endDate='' or endDate is null,true,dnhead.dispatch_date<=endDate)
and dnhead.so_dn_head_oid=dndetail.so_dn_head_oid
and dndetail.last_status in ('140', '190')
and dnhead.bu_id=buId
and dndetail.item_bu_oid=item.item_bu_oid
and if(custCategory='' or custCategory is null,true,item.category1=custCategory)
and parter.parter_bu_oid=dndetail.entity_bu_oid
and (dndetail.pending_ind=0 or dndetail.pending_ind is null)
and item.pri_supplier_oid=supplier.parter_bu_oid
and if(entityOid='' or entityOid is null,true,if(entityOid=selectSupplier,parter.parter_type='S',dndetail.entity_bu_oid=entityOid))
and if(supplierId='' or supplierId is null,true,item.pri_supplier_oid=supplierId)
and if(itemBuId='' or itemBuId is null,true,item.item_bu_id=itemBuId)
and if(itemBuId='' or itemBuId is null,true,item.bu_id=buId)
group by dndetail.entity_bu_oid, dndetail.item_bu_oid
having qty is not null and qty <> 0)T
set a.dn_qty=a.dn_qty+T.qty
where a.id=T.id;

解决方案 »

  1.   

    临时表只能被打开一次,在一个SESSION里面。
      

  2.   

    insert   into   tmp_query_full_item_inv
    (
          id,
          account_oid             ,
          bu_id                         ,
          parter_bu_oid         ,
          parter_bu_id           ,
          parter_bu_name       ,
          item_category         ,
          item_bu_oid             ,
          item_bu_id               ,
          item_bu_name           ,
          item_rpt_id             ,
          supplier_oid           ,
          supplier_id             ,
          supplier_name         ,
          begin_qty                 ,
          rn_qty                       ,
          un_rn_qty                 ,
          dn_qty                       ,
          lock_qty                   ,
          inv_adj_qty             ,
          entity_tsf_qty       ,
          pending_tsf_qty     ,
          end_qty                     ,
          inv_days                   ,
          avg_qty                     ,
          order_qty_1             ,
          order_qty_2            
    )
    (
    select   distinct(id),
          account_oid             ,
          bu_id                         ,
          parter_bu_oid         ,
          parter_bu_id           ,
          parter_bu_name       ,
          item_category         ,
          item_bu_oid             ,
          item_bu_id               ,
          item_bu_name           ,
          item_rpt_id             ,
          supplier_oid           ,
          supplier_id             ,
          supplier_name         ,
          begin_qty                 ,
          rn_qty                       ,
          un_rn_qty                 ,
          0   as   qty                       ,
          lock_qty                   ,
          inv_adj_qty             ,
          entity_tsf_qty       ,
          pending_tsf_qty     ,
          end_qty                     ,
          inv_days                   ,
          avg_qty                     ,
          order_qty_1             ,
          order_qty_2   from
        (select   concat(parter.parter_bu_oid,',',item.item_bu_oid)   as   id,
    accountOid   as   account_oid,
    buId   as   bu_id,
    parter.parter_bu_oid,
    parter.parter_bu_id,  
    parter.parter_bu_name,  
    item.category1   as   item_category,  
    item.item_bu_oid,
    item.item_bu_id,  
    item.item_bu_name,  
    item.item_rpt_id,  
    supplier.parter_bu_oid   as   supplier_oid,
    supplier.parter_bu_id   as   supplier_id,  
    supplier.parter_bu_name   as   supplier_name,  
    0   as   begin_qty                 ,
                    0   as   rn_qty                       ,
                    0   as   un_rn_qty                 ,
                    sum(dndetail.shipped_qty)   as   qty,
                    0   as   lock_qty                   ,
                    0   as   inv_adj_qty             ,
                    0   as   entity_tsf_qty       ,
                    0   as   pending_tsf_qty     ,
                    0   as   end_qty                     ,
                    0   as   inv_days                   ,
                    0   as   avg_qty                     ,
                    0   as   order_qty_1             ,
                    0   as   order_qty_2            
    from   so_dn_head   dnhead,   so_dn_detail   dndetail,   v_mf_item_bu   item,   v_mf_parter_bu   parter,   v_mf_parter_bu   supplier
    where   if(startDate=''   or   startDate   is   null,true,dnhead.dispatch_date> =startDate)  
    and   if(endDate=''   or   endDate   is   null,true,dnhead.dispatch_date <=endDate)
    and   dnhead.so_dn_head_oid=dndetail.so_dn_head_oid
    and   dndetail.last_status   in   ('140',   '190')
    and   dnhead.bu_id=buId
    and   dndetail.item_bu_oid=item.item_bu_oid
    and   if(custCategory=''   or   custCategory   is   null,true,item.category1=custCategory)
    and   parter.parter_bu_oid=dndetail.entity_bu_oid
    and   (dndetail.pending_ind=0   or   dndetail.pending_ind   is   null)
    and   item.pri_supplier_oid=supplier.parter_bu_oid
    and   if(entityOid=''   or   entityOid   is   null,true,if(entityOid=selectSupplier,parter.parter_type='S',dndetail.entity_bu_oid=entityOid))
    and   if(supplierId=''   or   supplierId   is   null,true,item.pri_supplier_oid=supplierId)
    and   if(itemBuId=''   or   itemBuId   is   null,true,item.item_bu_id=itemBuId)
    and   if(itemBuId=''   or   itemBuId   is   null,true,item.bu_id=buId)
    group   by   dndetail.entity_bu_oid,   dndetail.item_bu_oid
    having   qty   is   not   null   and   qty   <>   0)T
    where   id   not   in   (select   id   from   tmp_query_full_item_inv)
    ); 
      

  3.   

    啊?不能select两次?那我这个该怎么搞?