为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:DM Database Server 64 V8 【操作系统】:麒麟v10 【CPU】:鲲鹏920 【问题描述】*: sql server的存储过程查询sql后自带隐式数据集,可以直接使用 达梦如何获取存储过程中的sql结果,更进一步,如果通过dblink获取远端数据库存储过程的结果集
考虑用管道:
-- 1. 创建一张用户基础表 CREATE TABLE user_base ( user_id NUMBER, user_name VARCHAR2(50), create_time DATE ); -- 2. 插入几条测试数据 INSERT INTO user_base VALUES (1, '张三', SYSDATE - 10); INSERT INTO user_base VALUES (2, '李四', SYSDATE - 5); INSERT INTO user_base VALUES (3, '王五', SYSDATE - 2); COMMIT; -- 1. 创建一个对象类型,描述结果集中每一行的结构 CREATE OR REPLACE TYPE user_result_obj AS OBJECT ( v_user_id NUMBER, v_user_name VARCHAR2(50), v_create_time VARCHAR2(20) -- 这里将日期转成字符串,便于展示 ); -- 2. 创建一个嵌套表类型,即“由上述对象组成的集合” CREATE OR REPLACE TYPE user_result_tab IS TABLE OF user_result_obj; CREATE OR REPLACE FUNCTION get_user_data (p_date DATE) RETURN user_result_tab -- 返回值类型是上面定义的集合类型 PIPELINED -- 表示这是一个管道函数 IS -- 定义游标,用于逐行获取数据 CURSOR cur_user IS SELECT user_id, user_name, create_time FROM user_base WHERE create_time >= p_date; BEGIN -- 循环处理游标中的每一行 FOR rec IN cur_user LOOP -- 用 PIPE ROW 将数据包装成对象后“吐”出 PIPE ROW (user_result_obj( rec.user_id, rec.user_name, TO_CHAR(rec.create_time, 'YYYY-MM-DD HH24:MI:SS') )); END LOOP; -- 数据全部输出完毕,必须加上这个 RETURN RETURN; END get_user_data; / --像表一样查询 SELECT * FROM TABLE(get_user_data(SYSDATE - 7));
考虑用管道: