powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с хранимой процедурой: return query
4 сообщений из 4, страница 1 из 1
Проблема с хранимой процедурой: return query
    #39099302
anzgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Простейшая функция.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION "public"."user_info1" ("log" character varying, "pass" character varying) RETURNS SETOF record AS 'DECLARE
user_id INTEGER;

BEGIN
SELECT id FROM users INTO user_id WHERE login = $1 AND password = md5($2);
IF user_id > 0 THEN
SELECT dblink_connect(''myconn'',''hostaddr=127.0.0.1 dbname=users user=*** password=***'');
RETURN QUERY SELECT * FROM users WHERE id = user_id;
END IF;
END;' LANGUAGE "plpgsql" COST 100 ROWS 1000
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER



Возникает ошибка:
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function user_info1(character varying,character varying) line 8 at SQL statement

Голову сломал - не могу понять, как при RETURN QUERY (!!!) может возвращаться такая ошибка...
...
Рейтинг: 0 / 0
Проблема с хранимой процедурой: return query
    #39099333
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anzgarЗдравствуйте!
Простейшая функция.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION "public"."user_info1" ("log" character varying, "pass" character varying) RETURNS SETOF record AS 'DECLARE
user_id INTEGER;

BEGIN
SELECT id FROM users INTO user_id WHERE login = $1 AND password = md5($2);
IF user_id > 0 THEN
SELECT dblink_connect(''myconn'',''hostaddr=127.0.0.1 dbname=users user=*** password=***'');
RETURN QUERY SELECT * FROM users WHERE id = user_id;
END IF;
END;' LANGUAGE "plpgsql" COST 100 ROWS 1000
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER



Возникает ошибка:
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function user_info1(character varying,character varying) line 8 at SQL statement

Голову сломал - не могу понять, как при RETURN QUERY (!!!) может возвращаться такая ошибка...

он там
1. непришей
2. если для красоты -- замените на PERFORM
...
Рейтинг: 0 / 0
Проблема с хранимой процедурой: return query
    #39099376
anzgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, понаписал джигурды и радуюсь. Вот так должно выглядеть:

Код: plsql
1.
2.
3.
PERFORM dblink_connect('myconn','hostaddr=127.0.0.1 dbname=users user=*** password=***');
SELECT * FROM dblink ('myconn',CONCAT('SELECT name,email FROM users_info WHERE id = ',user_id)) INTO userinfo AS t(name varchar(128),email varchar(64));
RETURN userinfo;



Всё работает, спасибо.
...
Рейтинг: 0 / 0
Проблема с хранимой процедурой: return query
    #39102160
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anzgar, советую писать функции, которые возвращают table а не set of record, когда это возможно. И, конечно, не следует писать ' select * ', тем более в return query . С табличными функциям гораздо проще работать.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с хранимой процедурой: return query
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]