说我已经定义了数据结构:
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'
答案 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的参数的过程,然后返回一个结果集,而不是只返回一个用户。