ОШИБКА: запрос не имеет адресата для данных результата
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);