你这里是一行吗?先把这条语句create table 语句先在SQLPLUS下面测试把字符串构造好,如str:='CREATE  TABLE ITF_SERV_LEDGER_' || to_char(i_curr_yearmonth ,'000000') || 
' (    SERV_NO VARCHAR2(20),'||  
 'ACCOUNT_NO VARCHAR2(20), '||
 ' TAB_FEE_TYPE_ID VARCHAR2(20) NOT NULL, '||
 '  SERV_SYS_ID NUMBER(*, 0),'||  
 '  BILL_FEE NUMBER(12, 2), '||
 '   ACCOUNT_FEE NUMBER(12, 2), '|| 
 '   YEAR_MONTH NUMBER(*, 0), '|| 
 '   CUSTOMER_NO VARCHAR2(12), '||
 '    CUSTOMER_NAME VARCHAR2(80), '||
 '     DURATION NUMBER(12, 0), '||
 '      CALL_COUNT NUMBER(12, 0), '||
 '       LOAD_DATE DATE default sysdate)';

解决方案 »

  1.   

    execute immediate 'CREATE  TABLE ITF_SERV_LEDGER_' || to_char(i_curr_yearmonth ,'yyyymm') || 
    ' (    SERV_NO VARCHAR2(20),  
     ACCOUNT_NO VARCHAR2(20), 
      TAB_FEE_TYPE_ID VARCHAR2(20) NOT NULL, 
       SERV_SYS_ID NUMBER(*, 0),  
       BILL_FEE NUMBER(12, 2), 
        ACCOUNT_FEE NUMBER(12, 2),  
        YEAR_MONTH NUMBER(*, 0),  
        CUSTOMER_NO VARCHAR2(12), 
         CUSTOMER_NAME VARCHAR2(80), 
          DURATION NUMBER(12, 0), 
           CALL_COUNT NUMBER(12, 0), 
            LOAD_DATE DATE default sysdate)';
      

  2.   

    肯定是Create..本身有错. 或者构造出了错
      

  3.   

    create的权限问题吧
    应该不是语句本身的问题
      

  4.   

    是的,如果语句再SQLPLUS下执行正确,那在存储过程里面要有明确的create table的权限sql>grant create table to user;
      

  5.   

    谢谢各位了,是to_char(i_curr_yearmonth ,'000000')这儿有问题,改成to_char(i_curr_yearmonth )就好了.