免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10153 | 回复: 12

请看如何在plpgsql函数中返回结果集! [复制链接]

论坛徽章:
0
发表于 2003-03-04 14:14 |显示全部楼层
postgres的record类型只是一个虚拟的东西,它并没有实际的存储空间,因此结果集合的返回一定要依靠一种实在的表的结构,你或者在定义
函数时候返回一个表或者视图或者象下面的例子一样在调用函数的时候
后面跟着一个表的结构。

说明:表和视图创建成功以后在postgres的类型系统表中会自动增加
以他们的名字命名的类型),也就是说某个表和某个视图其实也是一
种数据类型。



create table mm(a int, b int);
insert into mm values(1,1);
insert into mm values(2,2);
insert into mm values(3,3);

create or replace function mmm() returns setof record as
'
declare
   rec record;
begin

   FOR rec IN SELECT * FROM mm LOOP
      RETURN NEXT rec;
   END LOOP;
   
   return NULL;
end;'language 'oplsql';

select a.a,a.b from mmm() a(a int, b int);

a | b
---+---
1 | 1
2 | 2
3 | 3

论坛徽章:
0
发表于 2003-03-04 14:23 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

上次我在laser的站点他也给我讲解了,不过用在程序里还是不太方便啊

论坛徽章:
0
发表于 2003-03-04 14:33 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

利用SQL函数来实现结果集的返回,只是这种方法好像不是十分灵活!!


CREATE FUNCTION mmm() RETURNS SETOF mm AS '
    SELECT * FROM mm;
' LANGUAGE SQL;

SELECT * FROM mmm();

论坛徽章:
0
发表于 2003-03-04 14:38 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

其实数据库相对于操作系统复杂多了,博大精深。postgres一个开源的软件做到这种程度上已经很不一般了,如果使用它的人多起来,总有一天会和oracle叫板的,这叫应用拉动。到时候我相信会有很多的人都来做postgres的服务,靠买服务赚钱。。。

论坛徽章:
0
发表于 2003-03-04 14:43 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

http://laser.dyndns.zhengmai.net.cn/index.php?t=msg&th=281&start=0&rid=41&S=d941ce7d2d85fa733ee81c8756700042
-----------------
drop table users;
create table users(
user_id integer,
user_name varchar
);
create or replace function sp_user_get(integer) returns varchar as
'
DECLARE
name varchar;
begin
select INTO name user_name from users where user_id = $1;
return name;
end;'
language 'plpgsql';

create or replace function user_rec() returns setof users as '
DECLARE
rec RECORD;
BEGIN
FOR rec IN select * from users LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
END;' language 'plpgsql';

---------------------8<----------------------------

往表里面插些数据,然后:
select * from user_rec();

再简单些的一个例子:

create or replace function set_return_test(int, int) returns setof int as'
DECLARE
i integer;
BEGIN
FOR i IN $1 .. $2 LOOP
RETURN NEXT i;
END LOOP;
RETURN NEXT 10000;
RETURN NEXT 100000;
RETURN;
END;' language 'plpgsql';

执行的结果如下:
laser_uni=# select * from set_return_test(1, 3);
set_return_test
-----------------
1
2
3
10000
100000
(5 rows)

论坛徽章:
0
发表于 2003-03-04 15:04 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

谈谈你们的应用呗

论坛徽章:
0
发表于 2003-03-04 15:30 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

应用还没有,只是我自己学了一点

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2003-03-04 15:35 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

joint,你那个java程序还有问题么?

论坛徽章:
0
发表于 2003-03-04 15:47 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

第一次运行的时候看到了"上海",然后把数据删除再运行,又成乱码了,我还得再看看,感觉所学还甚浅,感叹!!!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2003-03-04 15:52 |显示全部楼层

请看如何在plpgsql函数中返回结果集!

我改了一下,你看看
http://chinaunix.net/forum/viewtopic.php?t=15910
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,8.5折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时8.5折扣期:2019年9月30日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP