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

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');

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

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

Ответ 1

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

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

Итак. Измените свой SQL на:

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

Кроме того, поскольку вы используете имена переменных (userid, pwd) , используйте их:

SELECT  (_password = pwd) INTO passed FROM _vRegistration WHERE _userid = userid;

Ответ 2

Заметки о значении присваивания

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

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

 Y := f(X);

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

 EXECUTE 'f(X)' INTO Y;     

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

 SELECT f(X) INTO Y;

Используйте PERFORM stat, когда отбрасываете результаты или работаете с void return:

 PERFORM f(X);