Пользовательские функции в базе данных (PostgreSQL) - PullRequest
0 голосов
/ 25 марта 2012

Скажем, я определил структуру данных:

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 ]

1 голос
/ 26 марта 2012

Предполагая, что 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

Обратите внимание, что столбец prof необходимо заключить в квадратные скобки, иначе парсер будет считать, что это ссылка на таблицу.

Вы можете обернуть все это в вид (очевидно, без условия WHERE), чтобы сделать вещи проще.

0 голосов
/ 25 марта 2012

вам нужна другая хранимая процедура / функция, чтобы получить пользователей младше 20 лет, и для каждого пользователя, когда возвращается этот первый процесс или функция, вы можете вызвать вторую.

Или вы можете сделать все в одной структуре. Создайте процедуру, которая возвращает информацию о пользователях и которая принимает другой параметр с именем age, а затем вы возвращаете набор результатов вместо только одного пользователя.

...