存储过程的问题

pingan99 2003-09-11 01:58:46
请问:
PostgreSql中可以使用存储过程吗!
如果可以写好的存储过程放在什么地方呢?
如果写代码访问数据库,该怎么写呢?
谢谢!
...全文
25 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunthing 2003-09-18
  • 打赏
  • 举报
回复
基本上就这些,再深入的话,要联系具体的应用!
pingan99 2003-09-12
  • 打赏
  • 举报
回复
谢谢,可以多讲一些吗!
sunthing 2003-09-11
  • 打赏
  • 举报
回复
可以!
放服务器上!
用什么语言?

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

FOR rec IN SELECT foo.fooid,foo.foosubid,foo.fooname ,people_data.dk_anrede,dk_name_firma FROM foo inner join people_data on foo.fooid = people_data.dk_id LOOP
RETURN next rec;

END LOOP;

return NULL;
end;'language 'plpgsql';

select * from mmm() a(a int4,b int4,c text,d varchar, e varchar) ;

RETURN expression;
带表达式的 RETURN 是用于从一个不返回 结果集的 PL/pgSQL 函数中返回。 函数终止,然后 expression 的值返回给调用者。

要返回一个复合(行)数值,你必须写一个记录或者行变量 做 expression。如果返回的是 标量类型,那么可以使用任何表达式。表达式的结果将自动被 转换成函数声明的返回类型,就象赋值里说的那样。 (如果你声明了该函数返回 void,那么可以省略这个 表达式,并且在任何情况下都会被忽略。)

一个函数的返回值不能是未定义。如果控制到达了函数的最顶层 的块而没有碰到一个 RETURN 语句,那么它 就会发生一个错误。

如果一个 PL/pgSQL 函数声明为返回 SETOF sometype,那么遵循的过程则略有不同。在这种 情况下,要返回的独立的项是在 RETURN NEXT 命令里声明的,然后最后有一个不带参数的 RETURN 命令 用于告诉我们这个函数已经完成执行了。RETURN NEXT 可以用于标量和复合数据类型;对于后者,将返回一个完整的结果“表”。 使用 RETURN NEXT 的函数应该按照下面的风格 调用:

SELECT * FROM some_func();
也就是说,这个函数是用做 FROM 子句里面的一个表数据源的。

RETURN NEXT expression;
RETURN NEXT 实际上并不从函数中返回; 它只是简单地把表达式的值(或者记录或者行变量,只要是对 返回的数据类型合适的东西)保存起来。然后执行继续执行 PL/pgSQL 函数里的下一条语句。随着后继 的 RETURN NEXT 命令的执行,结果集 就建立起来了。最后的一个不需要参数的 RETURN, 导致控制退出该函数。

注意: 目前的 PL/pgSQL 的 RETURN NEXT 实现在从函数返回之前把整个结果集都保存起来,就象上面描述的那样。 这意味着如果一个 PL/pgSQL 函数生成一个非常大 的结果集,性能可能会很差:数据将被写到磁盘上以避免内存耗尽, 但是函数在完成整个结果集的生成之前不会退出。将来的 PL/pgSQL 版本可能会允许用户定义没有这样限制的返回集合的函数。 目前,数据开始向磁盘里写的时刻是由配置变量 SORT_MEM 控制的。拥有足够内存的管理员如果想在内存里存储更大的结果集, 则可以考虑把这个参数增大一些。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧