救命?请教Oracle高手(100分)

  • 主题发起人 主题发起人 wind206
  • 开始时间 开始时间
W

wind206

Unregistered / Unconfirmed
GUEST, unregistred user!
我想应用Oracle的会话临时表,在Oracke的存储过程中可以创建临时表,但不可以插入数据;但在编成语言中可以插入(插入前先调用存储过程创建临时表),用数据库的管理台,查询器也可以插入数据.不知到为什么,请高手指教!
附带Oracle存储过程(存储过程本身应该没有错误,可通过编译):
begin
select count(*) into count_tt from user_tables where table_name='TT_JR_P_MAIN';
if count_tt<1 then

execute immediate 'Create Global Temporary Table TT_JR_P_MAIN
( REPORT_ID varchar2(20), UNIT_NO varchar2(20),
REPORT_NO varchar2(20), SHEET_NO varchar2(20) )
On Commit Preserve Rows';
end if;
execute immediate 'delete from TT_JR_P_MAIN';
insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values('1','2','3','4') ;
insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values('1','2','3','4') ;
insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values('1','2','3','4') ;
insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values('1','2','3','4') ;
execute immediate
' insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values(''1'',''2'',''3'',''4'') ';
execute immediate
' insert into TT_JR_P_MAIN(REPORT_ID,UNIT_NO,REPORT_NO,SHEET_NO) values(''1'',''2'',''3'',''4'') ';
end sp_Create_jtyb_passenger;
 
你只有在一个会话中才能查询到数据
 
是的.但在webserver的一个事务(包括java代码一个方法中的的insert ,select ,和调用存储过程)过程中应该是同一个会话吧.一般的webserver都是用一个用户连接数据库的,不同的连接也应该是属于同一个会话吧?
 
用户、事务、会话是不同的概念
你可以在SQL/Plus中顺序执行下面的语句:
Execute sp_Create_jtyb_passenger;
SELECT * FROM TT_JR_P_MAIN;
 
在SQL/Plus中以一个用户登陆,执行后可以查得到数据,情况正常;
这样的话,我在存储过程中生成数据后,只能在当前存储过程中应用,不能在存储过程之外应用,哪怕属于同一个事务也不行.
我一开始是认为会话的生命周期长于事务的.
那么事务类型的临时表可以吗?java代码方法中的select ,insert语句和调用的存储过程从大的方面考虑应该属于一个事务(或者可以认为这个大的事物中包含几个小的事务,存储过程过程为其中一个小事务,不知它们之间可以共享临时表中的数据没有).是不是要在存储过程中生产的数据能够给java代码中应用不能写入临时表(事务,会话都不行?),只能写入表?
多谢解答!
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
619
import
I
后退
顶部