
Pl/sql存储过程中 游标返回值问题
Pl/sql存储过程中Executeimmediate‘createglobaltemporarytabletemp_s1(idint,namevarchar(20))a...
Pl/sql存储过程中
Execute immediate ‘create global temporary table temp_s1(id int,namevarchar(20)) as select * from stu where age>18’
怎样用游标返回temp_s1中的内容?谢谢 展开
Execute immediate ‘create global temporary table temp_s1(id int,namevarchar(20)) as select * from stu where age>18’
怎样用游标返回temp_s1中的内容?谢谢 展开
3个回答
展开全部
看到你刚才的问题了,看看我的回答,
补充:刚测了下,如果创建的是临时表,用create as select * from xxx,是没有数据的
创建后再执行一次插入
DECLARE
psqlstr VARCHAR2(200);
stmp VARCHAR2(200);
tname VARCHAR2(30);
BEGIN
tname := 'temp_s1'; -- 临时表名
stmp := 'select * from t1 where 1=1'; -- t1为源表,stmp为从源表查询数据的sql
psqlstr := 'create global temporary table '||tname||' as '||stmp;
EXECUTE IMMEDIATE psqlstr; -- 创建成功,但是临时表中无数据
psqlstr := 'insert into t1_temp '||stmp; -- 再插入一次数据
EXECUTE IMMEDIATE psqlstr;
END;
补充:刚测了下,如果创建的是临时表,用create as select * from xxx,是没有数据的
创建后再执行一次插入
DECLARE
psqlstr VARCHAR2(200);
stmp VARCHAR2(200);
tname VARCHAR2(30);
BEGIN
tname := 'temp_s1'; -- 临时表名
stmp := 'select * from t1 where 1=1'; -- t1为源表,stmp为从源表查询数据的sql
psqlstr := 'create global temporary table '||tname||' as '||stmp;
EXECUTE IMMEDIATE psqlstr; -- 创建成功,但是临时表中无数据
psqlstr := 'insert into t1_temp '||stmp; -- 再插入一次数据
EXECUTE IMMEDIATE psqlstr;
END;
追问
谢谢您的耐心回答,不过我想要的结果是返回临时表temp_s1中的内容。我动态创建临时表,并且里面用select添加了内容,但不知道用什么方法把临时表中的内容返回到程序中。如果不是动态创建的表,用open 游标 for select 语句就可以,现在的问题是temp_s1是动态创建的!不知道怎么返回?谢谢
追答
搜一下dbms_sql中动态游标的定义方式
1. 创建临时表后,通过DBA_TAB_COLS查询该表包括哪些列,在DATA_TYPE判断类型
2. 通过DBMS_SQL动态游标来获取temp_s1中数据
关于动态游标,大体流程是open_cursor,define_column,excute_and_fetch,column_value,close_cursor
你搜一下方法吧
展开全部
create or replace procedure test(v_cursor out sys_refcursor) as
begin
open v_cursor for select * from temp_s1;
end test;
begin
open v_cursor for select * from temp_s1;
end test;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的执行代码呢?
把代码复制出来,可能助你分析一番
把代码复制出来,可能助你分析一番
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询