CREATE OR REPLACE PROCEDURE P_TEMP_XUE911 ( V_PRO_ID   VARCHAR2,
                                               V_MONTH_ID  VARCHAR2,
 V_SERVICE_TYPE VARCHAR2) IS
 
V_SQL LONG;
V_STR LONG;
BEGIN
--动态SQL创建临时表 
V_STR :='CREATE   GLOBAL   TEMPORARY   TABLE   ZB_XUE911   (
      COL_PROV_ID              VARCHAR2(200),
      COL_SUBS_INSTANCE_ID     VARCHAR2(200),
COL_DEVICE_NUMBER         NUMBER,
COL_TOTAL_FEE_ALL         NUMBER
)   ON   COMMIT   PRESERVE(DELETE)   ROWS ';
EXECUTE IMMEDIATE V_STR;
---查询SERVICE_TYPE为20AAAAAA或30AAAAAA出账总数小于0的记录插入到临时表
V_SQL :='INSERT INTO ZB_XUE911
SELECT '''|| V_PRO_ID||''',SUBS_INSTANCE_ID,DEVICE_NUMBER, TOTAL_FEE_ALL
FROM DWA_V_M_CUS_MB_USER_EXT_'||V_PRO_ID||' T
WHERE  T.PRO_ID='''||V_PRO_ID||''' AND T.MONTH_ID = '''||V_MONTH_ID||''' AND T.service_type ='''||V_SERVICE_TYPE||'''AND T.total_fee_all <0 AND ROWNUM<6';EXECUTE IMMEDIATE V_SQL;COMMIT;END;求指点 谢谢大侠们 在线等奥

解决方案 »

  1.   

    然后我运行时exec p_temp_xue911(010,201207,20AAAAAA) 
    提示错误了
      

  2.   

    临时表创建语法错误,可以参考:
    --临时表是那些只在事务处理和会话期间存在数据的表
     create global temporary table session_table
     on commit preserve rows  --preserve保留
     as select * from scott.emp
     
     select count(*) from session_table  --14条记录
    --临时表,会话结束的时候表数据清空
     create global temporary table transactioin_table
    on commit delete rows  --事务结束的时候该表的行会被删除
    as select * from scott.empinsert into transactioin_table
    select * from scott.emp
    select count(*) from transactioin_table  --14条记录
    commit  --提交事务
    select count(*) from session_table  --14条记录
    select count(*) from transactioin_table  --0条记录!!
     --断开会话,重新登陆
    select count(*) from session_table  --0条记录!!
     select count(*) from transactioin_table  --0条记录!!
      

  3.   


    --傳參有錯
    exec P_TEMP_XUE911('010','201207','20AAAAAA')
    --此處有也錯
    COMMIT PRESERVE(DELETE) ROWS
    要麼是
    ON COMMIT PRESERVE ROWS 
    --或
    ON COMMIT DELETE ROWS 
      

  4.   

    plsql里可以调试的 设置断点一步步跟踪调试 你就知道哪错了