ОШИБКА: у запроса нет места назначения для данных результата - PullRequest
10 голосов
/ 18 января 2010
CREATE OR REPLACE FUNCTION _chkLogin(userid varchar, pwd varchar)
RETURNS BOOLEAN AS
$BODY$
DECLARE 
 passed BOOLEAN;
BEGIN
 SELECT  (_password = $2) FROM _vRegistration WHERE _userid = $1;
 RETURN passed;
END;
$BODY$
LANGUAGE 'plpgsql';

Когда я выполняю код, указанный выше, я получаю следующую ошибку,

SELECT _chkLogin('username','abcd') as passed;

ОШИБКА: у запроса нет пункта назначения для данные результата

Я использовал перформанс, тогда у меня другая проблема,

PERFORM _chkLogin('username','abcd');

ОШИБКА: синтаксическая ошибка в или около "Выполнить"

Подскажите, что мне делать, чтобы преодолеть эту ошибку.

Ответы [ 2 ]

19 голосов
/ 18 января 2010

Вы возвращаете пройденное, но вы никогда не присваиваете ему значение.

И команда выбора внутри функции должна иметь место для помещения данных.

Так. Измените ваш SQL на:

SELECT  (_password = $2) INTO passed FROM _vRegistration WHERE _userid = $1;

Также - поскольку вы используете имена для переменных (userid, pwd) используйте их :

SELECT  (_password = pwd) INTO passed FROM _vRegistration WHERE _userid = userid;
3 голосов
/ 14 апреля 2014

Примечания о присвоении значения

(см. этот другой вопрос для присвоения значения переменной в разделе объявления )

Синтаксис языка PLpgSQL имеет много способов сказать:

 Y := f(X);

Предложение EXECUTE предназначено только для "динамического выполнения" ( меньше производительности ),

 EXECUTE 'f(X)' INTO Y;     

Используйте Y := f(X); или SELECT для выполнения статических объявлений,

 SELECT f(X) INTO Y;

Использовать PERFORM для оценки, если отбрасывать результаты или работать с пустыми возвратами:

 PERFORM f(X);     
...