2.oracle 创建临时表 部分2,(把存储过程sql执行的结果,保存临时表中,然后把临时表作为结果集)返回给用户
create or replace procedure TestInPutOutPut2
as
vv_cont number(8);
vals2 A_TEMP%ROWTYPE;
v_count INT;
str varchar2(2000);
vv_sql varchar2(2000);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
commit; --1.如果这个临时表已经存在了,则删除这个临时表
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST ( --2.创建表
p1 VARCHAR2(20),
p2 VARCHAR2(20),
p3 VARCHAR2(20),
p4 VARCHAR2(20),
p5 VARCHAR2(20) )
ON COMMIT PRESERVE ROWS';
vv_sql:='select nvl(w1.mon,w2.mon)mon, nvl(w1.ty_yq_sl,0) 统印_以, nvl(w1.ty_bn_sl,0) 统印_今, nvl(w2.gm_yq_sl,0) 冠_以, nvl(w2.gm_bn_sl,0)冠_今
from
(select nvl(t1.sl,0) ty_yq_sl ,nvl(t2.sl,0) ty_bn_sl , nvl(t1.montn,t2.montn ) mon
from (select montn ,sl from aaa_test where invtype =0 and preyearthisyear =-1) t1 full join
(select montn ,sl from aaa_test where invtype =0 and preyearthisyear =0 ) t2
on t1.montn = t2.montn ) w1 full join
(select nvl(t1.sl,0) gm_yq_sl,nvl(t2.sl,0) gm_bn_sl, nvl(t1.montn,t2.montn ) mon
from (select montn ,sl from aaa_test where invtype =1 and preyearthisyear =-1) t1 full join
(select montn ,sl from aaa_test where invtype =1 and preyearthisyear =0 ) t2
on t1.montn = t2.montn ) w2
on w1.mon = w2.mon';
--3.创建临时表,并且把 vv_sql中的查询结果保存到 临时表当中
execute immediate 'grant create table to inv';
execute immediate str;
str:='insert into SETT_DAILYTEST ('||vv_sql||')'; --4.使用动态SQL语句来执行(创建临时表,并且把 vv_sql中的查询结果保存到 临时表当中)
commit;
execute immediate str;
select count(*) into v_count from SETT_DAILYTEST; --5.看看装进来了多少条数据
end TestInPutOutPut2;
posted on 2014-01-03 15:16 fantiejun0436 阅读(249) 评论(0) 收藏 举报
浙公网安备 33010602011771号