Thread: Creating a boolean function
by the way you know how to create the following sql function? I need to return a boolean saying if an object is onloan. the loan table is as follows: loans ----- code_loan code_user typetable i want to check these three fields, the first two fields (the code ones) are integer and the last a string. I tried create function check_loan (text,int,int) returns bool as 'select CAST(typetable AS text) from loans where typetable=$1 and code_user=$2 and code_loan=$3;' language 'sql'; But I got that the parser cannot identify the =$ operator and requires me to do the proper casting. How can I do it? Sorry for the questions, but I am new at creating functions and I have to hand in this project tomorrow. Many thanks Miguel
On Wed, 19 Sep 2001, [iso-8859-1] Miguel Gonz�lez wrote: > I tried > > create function check_loan (text,int,int) > returns bool > as > 'select CAST(typetable AS text) from loans where typetable=$1 and > code_user=$2 and code_loan=$3;' > language 'sql'; > > > But I got that the parser cannot identify the =$ operator and requires me to > do the proper casting. > > How can I do it? Sorry for the questions, but I am new at creating functions > and I have to hand in this project tomorrow. You can probably get away with just putting a space before the arguments, so '= $1' rather than '=$1'.
Maybe the reason is that you defined the function to return bool, but are attempting to return text? You need conditional logic, which suggests pl/pgsql is the way to go. Something simple should do it, like: create function check_loan (text,int,int) returns bool as ' begin select * from loans where typetable=$1 and code_user=$2 and code_loan=$3; if found then return true; else return false; end if; return true; end; ' language 'plpgsql'; Since this is your project, I will take the luxury of not testing that code :-) ----- Original Message ----- From: "Miguel González" <iafmgc@unileon.es> To: "Haller Christoph" <ch@rodos.fzk.de> Cc: "PostgreSQL SQL" <pgsql-sql@postgresql.org> Sent: Wednesday, September 19, 2001 1:55 PM Subject: Creating a boolean function > by the way you know how to create the following sql function? > > I need to return a boolean saying if an object is onloan. > > the loan table is as follows: > > loans > ----- > code_loan > code_user > typetable > > > i want to check these three fields, the first two fields (the code ones) are > integer and the last a string. > > I tried > > create function check_loan (text,int,int) > returns bool > as > 'select CAST(typetable AS text) from loans where typetable=$1 and > code_user=$2 and code_loan=$3;' > language 'sql'; > > > But I got that the parser cannot identify the =$ operator and requires me to > do the proper casting. > > How can I do it? Sorry for the questions, but I am new at creating functions > and I have to hand in this project tomorrow. > > Many thanks > > Miguel > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > >
Miguel González <iafmgc@unileon.es> writes: > But I got that the parser cannot identify the =$ operator You need a space between = and $. regards, tom lane
> You need conditional logic, which suggests pl/pgsql is the way to go. Maybe he could use simple sql function like this: create function check_loan(text,int,int) returns boolean as ' select ( select count(*) from kolcsonok where code_user=($2) and code_loan=($3) and typetable=($1) ) > 0; ' language 'sql'; The immediate benefit of it is that there's no need to install a procedural languge for this simple task. Regards, Baldvin