Question

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

When am executing the code above am getting the following error,

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

ERROR: query has no destination for result data

I've used perform then i get a different problem,

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

ERROR: syntax error at or near "perform"

Suggest me what should I be doing in order to overcome this error.

Was it helpful?

Solution

You do return passed but you never assign value to it.

And select command within the function has to have place to put data to.

So. Change your SQL to:

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

Also - since you're using names for variables (userid, pwd) use them:

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

OTHER TIPS

Notes about assign value

(see this other question for assign value to variable at declaration section)

The language PLpgSQL syntax have many ways to say:

 Y := f(X);

The EXECUTE clause is only for "dynamic execution" (less performance),

 EXECUTE 'f(X)' INTO Y;     

Use Y := f(X); or SELECT for execute static declarations,

 SELECT f(X) INTO Y;

Use PERFORM statment when discard the results or to work with void returns:

 PERFORM f(X);     
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top