为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8.1
【操作系统】:Window 2012 Server(开发测试服务器)
【CPU】: Intel至强
【问题描述】*:《DM8_SQL 程序设计》第5.4节,明确说明:存储函数中不能包含返回结果集的查询语句。现有一个带参数的复杂查询,多处被调用,老的SqlServer库是包装为一个函数(create function XXX…returns table),请问达梦有何替代方案?
存储过程返回的结果集,如何在SQL中使用?
–创建测试表
create table t01(id integer,name varchar2(10));
–创建测试数据
insert into t01(id,name) values (1,‘a’);
insert into t01(id,name) values (2,‘b’);
insert into t01(id,name) values (3,‘c’);
–提交
commit;
–查询表的数据
select * from t01;
–创建返回结果集的存储过程(系统类型)
create or replace procedure p_getdatas(v_cur out sys_refcursor)
as
begin
open v_cur for select id,name from t01;
end;
–测试结果的正确性
declare id t01.id%type;name t01.name%type;v_cur sys_refcursor;
begin
p_getdatas(v_cur);
loop
fetch v_cur into id,name;
exit when v_cur%notfound;
PRINT(name);
end loop;
close v_cur;
end;
DM视图不支持参数,CTE不能预先定义好后续被调用,存储过程又不能用在查询语句里(如:select * from get_salary(‘XXX’))。存储过程可以返回结果集,存储函数又加限制,实在是没招了。