Обсуждение: Creating a boolean function

Поиск
Список
Период
Сортировка

Creating a boolean function

От
Miguel González
Дата:
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







Re: Creating a boolean function

От
Stephan Szabo
Дата:
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'.




Re: Creating a boolean function

От
"Jeff Eckermann"
Дата:
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)
>
>



Re: Creating a boolean function

От
Tom Lane
Дата:
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


Re: Creating a boolean function

От
Kovacs Baldvin
Дата:
> 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