日期:2014-05-17  浏览次数:20802 次

为什么我运行自己编写的过程不能得出结果呢,哪里错了呢
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;

求指点 谢谢大侠们 在线等奥

------解决方案--------------------
临时表创建语法错误,可以参考:
--临时表是那些只在事务处理和会话期间存在数据的表
 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.emp

insert 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条记录!!
------解决方案--------------------
SQL code

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