CREATE OR REPLACE PROCEDURE UNFOLDBOM_LAST
(WODATE varchar2, CODE VARCHAR2)
 AS
  -- EXPORT数
   ITEMCODE  VARCHAR2(20);
   WOCODE  VARCHAR2(64);
   WO_CODE  VARCHAR2(64);
   STUFFCODE VARCHAR2(20);
   MANUALNO  VARCHAR2(20);
   STR_DATE  VARCHAR2(10);
   END_DATE  VARCHAR2(10);
   APPLYQTY  NUMBER(18,8);
   TRADECODE VARCHAR2(20);
   ITEMCODECLASS VARCHAR2(20);
   REGQTY NUMBER(18, 8);
   FACTQTY NUMBER(18, 8);
   BOMVER VARCHAR2(10);
   iCount  NUMBER;
  -- 企业BOM数
   BOMITEM  VARCHAR2(20);
   GROSSQTY  NUMBER(18,8);
   ITEMCODEDCLASS  VARCHAR2(20);  -- 外购
   ITEMCODED  VARCHAR2(20);
   QTY NUMBER(18,8);
   BEGINDATE  date;
   ENDDATE date;
   LEAVE  NUMBER(18,8);
   ITEM_CODE_D1 VARCHAR2(20);
   ITEMCODED1QTY NUMBER(18,8);
   TID NUMBER(10);
begin
  CREATE  global temporary  table  ATEMPPROCESS
  (
    BMS_WO_ID number(18, 0)  NOT NULL,
  BMS_WO_CODE VARCHAR2(64)  NULL,
  BMS_WO_DATE VARCHAR2(32) NULL,
  BMS_WO_OPEN_DATE VARCHAR2(32)  NULL,
  ITEM_CODE VARCHAR2(64)  NOT NULL,
  ITEM_CODE_CLASS VARCHAR2(20)  NULL,
  ITEM_CODE_D VARCHAR2(64)  NOT NULL,
  ITEM_CODE_D_CLASS VARCHAR2(20)  NULL,
  ITEM_CODE_REQ_QTY number(18, 8) NULL,
  ITEM_CODE_FACT_QTY number(18, 8) NULL,
  ITEM_CODE_D_REQ_QTY number(18, 8) NULL,
  ITEM_CODE_D_FACT_QTY number(18, 8) NULL,
  TYPE_CODE VARCHAR2(2)  NOT NULL,
  FLAG VARCHAR2(1)  NULL,
  STEP VARCHAR(10)  NOT NULL
  )这是我存储过程的前面的几行,运行到 CREATE  global temporary  table  ATEMPPROCESS
这行总是报错,PROCEDURE BMSDB.UNFOLDBOM_LAST 编译错误错误:PLS-00103: 出现符号 "CREATE"在需要下列之一时:
        begin case declare exit
          for goto if loop mod null pragma raise return select update
          while with <an identifier>
          <a double-quoted delimited-identifier> <a bind variable> <<
          close current delete fetch lock insert open rollback
          savepoint set sql execute commit forall merge
          <a single-quoted SQL string> pipe
行:34
独自解决不了,请指点

解决方案 »

  1.   

    用动态SQL,先拼接建表语句
    然后用execute immediate来执行
      

  2.   

    ddl语句不能在过程中执行
    可以用execute immediate来变通
      

  3.   

    begin execute immediate 'CREATE  global temporary  table  ATEMPPROCESS ( 
        BMS_WO_ID number(18, 0)  NOT NULL, 
      BMS_WO_CODE VARCHAR2(64)  NULL, 
      BMS_WO_DATE VARCHAR2(32) NULL, 
      BMS_WO_OPEN_DATE VARCHAR2(32)  NULL, 
      ITEM_CODE VARCHAR2(64)  NOT NULL, 
      ITEM_CODE_CLASS VARCHAR2(20)  NULL, 
      ITEM_CODE_D VARCHAR2(64)  NOT NULL, 
      ITEM_CODE_D_CLASS VARCHAR2(20)  NULL, 
      ITEM_CODE_REQ_QTY number(18, 8) NULL, 
      ITEM_CODE_FACT_QTY number(18, 8) NULL, 
      ITEM_CODE_D_REQ_QTY number(18, 8) NULL, 
      ITEM_CODE_D_FACT_QTY number(18, 8) NULL, 
      TYPE_CODE VARCHAR2(2)  NOT NULL, 
      FLAG VARCHAR2(1)  NULL, 
      STEP VARCHAR(10)  NOT NULL 
      )';end;
      

  4.   

    ddl语句在存储过程中执行需要用execute immediate