Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Похоже все вертятся вокруг одного и того же. Только начал разбираться с хранимыми процедурами. Интересует следующее: - есть 2 таблицы - есть хранимая процедура, возвращает ошибку "ERROR: query has no destination for result data" Вопрос как из запроса c параметрами в котором объеденены несколько таблиц получить select. - таблицы CREATE TABLE users.system_users ( idnum_key bigserial NOT NULL, system_groups bigint NOT NULL, idnum_org bigint, active bit(1), "login" character(50) NOT NULL, "password" character(50) NOT NULL, last_name character(50), first_name character(50), middle_name character(50), address character(255), service_phone character(50), home_phone character(50), mobile_phone character(50), mail character(50), icq character(50), description text, insert_date timestamp without time zone NOT NULL DEFAULT ('now'::text)::date, modify timestamp without time zone NOT NULL DEFAULT ('now'::text)::date ) WITHOUT OIDS; ALTER TABLE users.system_users OWNER TO postgres; CREATE TABLE users.system_groups ( idnum_key bigserial NOT NULL, group_name character(50) NOT NULL, access_level bigint NOT NULL, description text, insert_date timestamp without time zone NOT NULL DEFAULT ('now'::text)::date, modify timestamp without time zone NOT NULL DEFAULT ('now'::text)::date ) WITHOUT OIDS; ALTER TABLE users.system_groups OWNER TO postgres; COMMENT ON TABLE users.system_groups IS 'Системные группы'; -- процедура CREATE OR REPLACE FUNCTION users.up_system_users_authentification("login" bpchar, "password" bpchar) RETURNS SETOF record AS $BODY$ DECLARE login ALIAS FOR $1; password ALIAS FOR $2; BEGIN SELECT su.idnum_key, su.idnum_org, su.last_name, su.first_name, su.middle_name, sg.access_level FROM users.system_users su left join users.system_groups sg on sg.idnum_key = su.system_groups WHERE su.login = $1 AND su.password = $2 AND su.active = '1'; --RETURN; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE STRICT SECURITY DEFINER; ALTER FUNCTION users.up_system_users_authentification("login" bpchar, "password" bpchar) OWNER TO livedv_user; COMMENT ON FUNCTION users.up_system_users_authentification("login" bpchar, "password" bpchar) IS 'Проверка пользователя'; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 09:25 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
для этого нужно написать примерно следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 14:56 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
Примерно следующее не работает, уже проверил. Есть другие предложения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 15:37 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
тады выводи как проверял, сообщения об ошибках, .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 16:14 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
а зачем Вам здесь процедурный язык ? почему нельзя обойтись sql ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 17:49 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
Спасибо за пример с использованием sql. Работает. Здесь не идет речь об использовании именно SQL, а о том чтобы разобраться в обоих структурах, чтобы правильно соотносить маленькие и сложные запросы. По совету в процедурном языке делаю следующее и выдает ошибку: ERROR: a column definition list is required for functions returning "record" CREATE OR REPLACE FUNCTION users.up_system_users_authentification("login" bpchar, "password" bpchar) RETURNS SETOF record AS $BODY$ DECLARE login ALIAS FOR $1; password ALIAS FOR $2; query varchar; r record; BEGIN for r in loop SELECT su.idnum_key, su.idnum_org, su.last_name, su.first_name, su.middle_name, sg.access_level FROM users.system_users su left join users.system_groups sg on sg.idnum_key = su.system_groups WHERE su.login = $1 AND su.password = $2 AND su.active = '1'; return next r; end loop; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE STRICT SECURITY DEFINER; выполняем select * from users.up_system_users_authentification('123', '123') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 02:06 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
dmitry@ru По совету в процедурном языке делаю следующее и выдает ошибку: ERROR: a column definition list is required for functions returning "record" выполняем select * from users.up_system_users_authentification('123', '123')так и должно быть. потому что планировщик должен знать типы полей. ERROR: a column definition list is required for functions returning "record" - переводится как: список объявляющий колонки обязателен для функций возвращающих "record" это можно сделать указав их или в параметрах функции в качестве OUT параметра Код: plaintext 1. 2. 3. 4. 5. или указав их в самом запросе вызывающем функцию, приведя её результат к нужному типу: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 03:07 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
Определил типы, пишет следующее: ERROR: RETURN NEXT cannot have a parameter in function with OUT parameters at or near "r" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 07:18 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
исправьте Код: plaintext на Код: plaintext 1. а Код: plaintext Код: plaintext -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 18:20 |
|
||
|
Как из запроса c параметрами в котором объеденены несколько таблиц, получить select ?
|
|||
|---|---|---|---|
|
#18+
Ёш написал совершенно правильно. лучше использовать один SQL, однакое если вам очень надо, можете использовать примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 21:59 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35495613&tid=2004113]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 357ms |

| 0 / 0 |
