create or replace procedure lj_xw_htsh (cHth varchar2)
as
c1 varchar2 (2000);
c2 varchar2 (2000);
c3 varchar2 (2000);
c4 varchar2 (2000);
c5 varchar2 (2000);
c6 varchar2 (2000);
begin
select distinct '办事处:'|| 办事处 || ' 客户编号:' || 客户代码 || ' 客户名称:' || 客户名称 into c1 from ljnc_htzc where 合同编号=cHth;
select distinct '乙方产品经销区域:'|| 经销区域 into c2 from ljnc_htzc where 合同编号=cHth;
select distinct '乙方合同总额:'|| 总额/10000 || '万元; 合同首单:' || 首单金额/10000 ||'万元。' into c3 from ljnc_htzc where 合同编号=cHth;
select distinct '合同保证金:'|| 合同保证金/10000 || '万元; 红花郎专项保证金:' || 红花郎专项/10000 ||'万元; 追加保证金:' || 追加保证金/10000 ||'万元;'
into c4 from ljnc_htzc where 合同编号=cHth;
select distinct 特别约定 into c5 from ljnc_htzc where 合同编号=cHth;
str:='drop table tb_htsh';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE tb_htsh ( 合同内容 varchar2(2000)) ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动态SQL语句来执行
str:='insert into tb_htsh (合同内容) values(c1)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c2)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c3)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c4)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c5)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c6)';
execute immediate str;
str:='select * from tb_htsh';
execute immediate str;
end lj_xw_htsh;
上面的过程不能正确执行 要实现的功能就是 JAVA 传入合同号 然后去查找这个合同号的数据,把这些数据添加到
过程中建立的临时表中 然后再输出到JAVA中用表格显示给用户
如果用SQL SERVER 来建立很简单 用ORA就太麻烦了
as
c1 varchar2 (2000);
c2 varchar2 (2000);
c3 varchar2 (2000);
c4 varchar2 (2000);
c5 varchar2 (2000);
c6 varchar2 (2000);
begin
select distinct '办事处:'|| 办事处 || ' 客户编号:' || 客户代码 || ' 客户名称:' || 客户名称 into c1 from ljnc_htzc where 合同编号=cHth;
select distinct '乙方产品经销区域:'|| 经销区域 into c2 from ljnc_htzc where 合同编号=cHth;
select distinct '乙方合同总额:'|| 总额/10000 || '万元; 合同首单:' || 首单金额/10000 ||'万元。' into c3 from ljnc_htzc where 合同编号=cHth;
select distinct '合同保证金:'|| 合同保证金/10000 || '万元; 红花郎专项保证金:' || 红花郎专项/10000 ||'万元; 追加保证金:' || 追加保证金/10000 ||'万元;'
into c4 from ljnc_htzc where 合同编号=cHth;
select distinct 特别约定 into c5 from ljnc_htzc where 合同编号=cHth;
str:='drop table tb_htsh';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE tb_htsh ( 合同内容 varchar2(2000)) ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动态SQL语句来执行
str:='insert into tb_htsh (合同内容) values(c1)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c2)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c3)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c4)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c5)';
execute immediate str;
str:='insert into tb_htsh (合同内容) values(c6)';
execute immediate str;
str:='select * from tb_htsh';
execute immediate str;
end lj_xw_htsh;
上面的过程不能正确执行 要实现的功能就是 JAVA 传入合同号 然后去查找这个合同号的数据,把这些数据添加到
过程中建立的临时表中 然后再输出到JAVA中用表格显示给用户
如果用SQL SERVER 来建立很简单 用ORA就太麻烦了
解决方案 »
- oracle10g/11g有没有类似9i sql analyze?
- oracle如何访问远程数据库
- oracle序列问题
- cmd启动oracle
- TRIGGER ‘OF’ 问题:FORM中不可修改,而SQL/PLUS可以修改,如何使在FORM中也可以修改?
- 求解一个删除记录的SQL语句~~
- 在SQL Plus中如何指定一个数据库实例
- ****一个很急的问题,刚装了ORACLE 9.1的,我用SQL执行时,他说什么协议错误,请高正指正,!!!!!!!!!!!!!!!!!!!!!
- 提出前10个数据纪录的sql语句是什么啊?
- oracle中导出时出现的问题?
- ORA如何实现这样的功能
- toad for oracle
insert into T
select 1xx
union all
select 2xx
union all
.....不就可以了么?
全局临时表本来就可以多个会话公用而不会干扰,干嘛用动态sql去建呢
1.str:='drop table tb_htsh';这个地方如果第一次运行的话,你删除表就报错,你的程序无法走进创建临时表的语句就已经中止。
2.临时表的概念你理解上有问题,你这样还不如拿个普通的表作为临时表实在.你使用的是基于事务的临时表,提交后临时表的数据就已经删除,如果你需要使用这样的表,你可以把这个创建语句放到存储过程外面去执行,这样的临时表对于各个事务来说,等同于一个事务一张表,事务与事务之间的操作完全独立。
3.execute immediate str;你执行下这个有什么意义呢?返回给java应用程序的是什么呢?什么都没有返回。建议修改:
不使用临时表,直接返回个游标给java,java里对游标记录直接操作就行了参考代码如下:create or replace procedure lj_xw_htsh (cHth varchar2,o_cur out sys_refcursor)
as
begin
open o_cur select distinct
'办事处:'|| 办事处 || ' 客户编号:' || 客户代码 || ' 客户名称:' || 客户名称 c1,
'乙方产品经销区域:'|| 经销区域 c2,
'乙方合同总额:'|| 总额/10000 || '万元; 合同首单:' || 首单金额/10000 ||'万元。' c3,
'合同保证金:'|| 合同保证金/10000 || '万元; 红花郎专项保证金:' || 红花郎专项/10000 ||'万元;追加保证金:' || 追加保证金/10000 ||'万元;' c4,
特别约定 c5 from ljnc_htzc where 合同编号=cHth;
end lj_xw_htsh;
------少了个for
create or replace procedure lj_xw_htsh (cHth varchar2,o_cur out sys_refcursor)
as
begin
open o_cur for select distinct
'办事处:'|| 办事处 || ' 客户编号:' || 客户代码 || ' 客户名称:' || 客户名称 c1,
'乙方产品经销区域:'|| 经销区域 c2,
'乙方合同总额:'|| 总额/10000 || '万元; 合同首单:' || 首单金额/10000 ||'万元。' c3,
'合同保证金:'|| 合同保证金/10000 || '万元; 红花郎专项保证金:' || 红花郎专项/10000 ||'万元;追加保证金:' || 追加保证金/10000 ||'万元;' c4,
特别约定 c5 from ljnc_htzc where 合同编号=cHth;
end lj_xw_htsh;
他这是基于会话型 的临时表 不是事物型的str:='CREATE GLOBAL TEMPORARY TABLE tb_htsh ( 合同内容 varchar2(2000)) ON COMMIT PRESERVE ROWS';
create or replace procedure lj_xw_htsh (cHth varchar2,cur out sys_refcursor)
as
begin
open cur for
with tb as
(select distinct '办事处:'|| 办事处 || ' 客户编号:' || 客户代码 || ' 客户名称:' || 客户名称 c1 from ljnc_htzc where 合同编号=cHth
union all
select distinct '乙方产品经销区域:'|| 经销区域 from ljnc_htzc where 合同编号=cHth
union all
select distinct '乙方合同总额:'|| 总额/10000 || '万元; 合同首单:' || 首单金额/10000 ||'万元。' from ljnc_htzc where 合同编号=cHth
union all
select distinct '合同保证金:'|| 合同保证金/10000 || '万元; 红花郎专项保证金:' || 红花郎专项/10000 ||'万元; 追加保证金:' || 追加保证金/10000 ||'万元;'
from ljnc_htzc where 合同编号=cHth
union all
select distinct 特别约定 from ljnc_htzc where 合同编号=cHth)
select * from tb;
end lj_xw_htsh;--Java调用的时候要记得及时关闭游标
--你这样做临时表没用,建议你添加一个work表,使用完后删除数据即可!