oracle 创建会话表,oracle临时会话表在存储过程中的使用

本帖最后由 zeh368 于 2015-9-18 18:55 编辑

问题:

在将db2的存储过程转换为oracle的过程中,涉及到临时会话表,会出现问题:具体描述:

原db2中的存储过程涉及临时会话表的部分:

--创建临时会话表

DECLARE GLOBAL TEMPORARY TABLE COL_NAMES(

id integer,

COLNAMES varchar(50)

)WITH REPLACE NOT LOGGED on commit preserve ROWS ;

DELETE FROM SESSION.COL_NAMES;

commit;

--向临时会话表中插入数据

INSERT INTO SESSION.COL_NAMES values(1, 'ARRIVAL');

INSERT INTO SESSION.COL_NAMES values(2, 'SORTOUT');

INSERT INTO SESSION.COL_NAMES values(3, 'RBACK');

INSERT INTO SESSION.COL_NAMES values(4, 'TRANSOUT');

INSERT INTO SESSION.COL_NAMES values(5, 'TRANSBACK');

commit;

--游标中用到临时会话表

FOR c2 AS loop2 CURSOR WITH HOLD FOR

SELECT ID,COLNAMES FROM SESSION.COL_NAMES ORDER BY id WITH ur

DO

execute immediate replace(v_exec_0,'ARRIVAL',c2.COLNAMES);

END FOR;

在oracle中进行转换:

CREATE OR REPLACE PROCEDURE K_TJBS_D IS

--创建游标,使用到了临时会话表

CURSOR csr3 is

SELECT ID,COLNAMES FROM COL_NAMES ORDER BY id ;

BEGIN

--创建临时会话表

temp_tab_str := 'create GLOBAL TEMPORARY TABLE COL_NAMES(id integer, COLNAMES varchar2(50)) on commit preserve ROWS ';

execute immediate temp_tab_str;

DELETE FROM COL_NAMES;

commit;

--向临时会话表中插入数据

INSERT INTO COL_NAMES values(1, 'ARRIVAL');

INSERT INTO COL_NAMES values(2, 'SORTOUT');

INSERT INTO COL_NAMES values(3, 'RBACK');

INSERT INTO COL_NAMES values(4, 'TRANSOUT');

INSERT INTO COL_NAMES values(5, 'TRANSBACK');

commit;

--使用游标

FOR c1 in csr3 loop

execute immediate replace(v_exec_0,'ARRIVAL',c2.COLNAMES);

END loop;

这样转换,编译不会通过,会在创建游标csr3的时候报:表或视图COL_NAMES不存在的错误,oracle的版本为11g

请问:在这种情况下,oracle应该中如何转换,多谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值