oracle如何建立会话,oralce里如何建立临时表及会话问题

这篇博客探讨了在Oracle数据库中创建和使用全局临时表的过程,以及遇到的问题。作者尝试通过游标插入数据到临时表,然后在循环中读取这些数据,但发现循环结果均为NULL。博客指出,可能的原因是对于临时表的理解和操作存在误区,特别是在事务管理和临时表的生命周期方面。同时,博客中还提到了SQL字符串的错误拼写,这可能是导致问题的另一个因素。
摘要由CSDN通过智能技术生成

declare

-- Local variables here

cursor cur_jg is

select is_jg,spid

from spkfk

where spid in (select spid

from xt_sjd_mx

where djbh in ('XSC00425794',

'XSC00426199',

'XSC00426159',

'XSC00425793',

'XSC00425899',

'XSC00425802',

'XSC00426007',

'XSC00425810'));

v_jg   varchar2(4);

v_spid varchar2(40);

sql_str varchar2(400);

v_ls int;

v_num int;

/* sql_new_str varchar2(200);*/

/*  ls_table varchar2(4);*/

begin

-- Test statements here

sql_str:= 'CREATE   GLOBAL   TEMPORARY   TABLE   ls_table(

a   varchar2(4)   not   null,

b   varchar2(40))

ON   COMMIT   PRESERVE   ROWS';

execute immediate  sql_str;

open cur_jg;

loop

fetch cur_jg

into v_jg, v_spid;

exit when cur_jg%notfound;

sql_str:='insert into ls_table values('''||v_jg||''','''||v_spid||''')';

execute immediate  sql_str;

sql_str:='commit';

execute immediate  sql_str;

--update spkfk set is_jg = '否' where spid = v_spid;

end loop;

close cur_jg;

for v_num in 1..9 loop

sql_str:='select a into  v_ls  from ls_table';

execute immediate  sql_str;

dbms_output.put_line(v_ls);

end loop;

exception

when others then

dbms_output.put_line(substr(sqlerrm,1,200));

end;

想建个历史表把一些数据保存下,然后在下边的for循环里,在单独显示出来,上边这种写法应该是在同一session里都可以取到值吧,为什么我循环出来的就全为null呢?我没写过临时表,请大侠指点下,谢谢。

oracle 的临时表是都是先在数据库里建立后,你在过程中调用,并对在transaction里DML操作临时表

不要像SQLSERVER那样在过程里建临时表

for v_num in 1..9 loop

sql_str:='select a into v_ls from ls_table';

execute immediate sql_str;

dbms_output.put_line(v_ls);

end loop;

你这样循环应该要报错的才对,除非你上面的游标只往临时表里插了一条数据,插多条肯定要报错

还有你拼字符串都拼错了

sql_str:='select a into v_ls from ls_table'

应该是

sql_str:='select a into '||v_ls||' from ls_table'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值