数据库中的用户定义函数(PostgreSQL)

时间:2012-03-25 12:54:24

标签: database postgresql database-design stored-procedures

说我已经定义了数据结构:

Users(u_id, name);

以及用于获取用户完整个人资料的存储过程/函数,给定u_id

getUserProfile(u_id) RETURNS (u_id, firstname, lastname, age);

现在,我希望有一种方法可以轻松检索所有用户,在20岁以下。 什么是在此基础上构建的适当组件,以便我可以调用类似的东西:

SELECT *
FROM user_profiles as UP
WHERE UP.age < '20'

2 个答案:

答案 0 :(得分:1)

假设getUserProfile()返回带有上述列的自定义数据类型,您可以执行以下操作:

SELECT (prof).u_id, 
       (prof).firstname, 
       (prof).lastname, 
       (prof).age
FROM (
  SELECT getUserProfile(u_id) as prof
  FROM users
) t
WHERE (prof).age < 20

请注意,教程需要括在括号中,否则解析器会认为它是表引用。

您可以将整个事物包装到视图中(显然没有WHERE条件)以使事情变得更容易。

答案 1 :(得分:0)

您需要另一个存储过程/函数来获取20岁以下的用户,并且对于每个用户,第一个proc或函数返回,您可以调用第二个。

或者你可以在一个结构中完成所有事情。创建一个返回用户信息并接受另一个名为age的参数的过程,然后返回一个结果集,而不是只返回一个用户。