--PostgreSQL不能简单的在存储过程里边select数据返回,只能通过return next的方式返回行集,如下为测试语句:--创建测试表 create table test1(id int,name varchar);--插入测试数据 insert into test1 values(1,'abc'); insert into test1 values(2,'def');--创建返回结果集的存储过程 CREATE OR REPLACE FUNCTION proc_test1() RETURNS setof record AS $BODY$declare v_rc record; beginfor v_rc in select * from test1 loop return next v_rc; end loop;return;end; $BODY$ LANGUAGE 'plpgsql' VOLATILE;--调用存储过程 select * from proc_test1() as t(id int,name varchar);
setof record 关键是这个set of 集合 也可以用于其他类型
大概理解了,有个问题 select * from proc_test1() as t(id int,name varchar); as t(id int,name varchar);作用只是显示出来吗?这里的t是不是只是个临时的表结构之类的? 如果我想在程序中得到这个结果集怎么做呢? 我的理解: OdbcCommand cmd = null; cmd = myConnection.CreateCommand(); cmd.CommandText = "{}";//这里的{}中应该填入什么呢?才能实现下面的功能 结果集 x = cmd.ExecuteNonQuery()
我用cmd.CommandText = “select * from proc_test1() as t(id int,name varchar)“ 可以,除了直接这样调用SQL语句还有什么其他的方法吗?
create table test1(id int,name varchar);--插入测试数据
insert into test1 values(1,'abc');
insert into test1 values(2,'def');--创建返回结果集的存储过程
CREATE OR REPLACE FUNCTION proc_test1()
RETURNS setof record AS
$BODY$declare
v_rc record;
beginfor v_rc in select * from test1
loop
return next v_rc;
end loop;return;end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;--调用存储过程
select * from proc_test1() as t(id int,name varchar);
关键是这个set of
集合
也可以用于其他类型
select * from proc_test1() as t(id int,name varchar);
as t(id int,name varchar);作用只是显示出来吗?这里的t是不是只是个临时的表结构之类的?
如果我想在程序中得到这个结果集怎么做呢?
我的理解:
OdbcCommand cmd = null;
cmd = myConnection.CreateCommand();
cmd.CommandText = "{}";//这里的{}中应该填入什么呢?才能实现下面的功能
结果集 x = cmd.ExecuteNonQuery()
可以,除了直接这样调用SQL语句还有什么其他的方法吗?