Skip site navigation (1) Skip section navigation (2)

Re: What's wrong in this pltcl function ?

From: Constantin Teodorescu <teo(at)flex(dot)ro>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Interfaces <pgsql-interfaces(at)postgresql(dot)org>
Subject: Re: What's wrong in this pltcl function ?
Date: 2002-10-14 14:31:18
Message-ID: 3DAAD536.8030603@flex.ro (view raw or flat)
Thread:
Lists: pgsql-interfaces
Tom Lane wrote:

>Constantin Teodorescu <teo(at)flex(dot)ro> writes:
>  
>
>>create function ruldeb(bpchar) returns bpchar as '
>>    set cont $1
>>    set rulaj 0.0
>>    spi_exec -array rec "select valoare from valori where debitor LIKE 
>>\'$cont%\'" {
>>        set rulaj [expr {$rulaj + $rec(valoare)}]
>>    }
>>    if {![info exists GD(conturi_lookup)]} {
>>        set GD(conturi_lookup) [spi_prepare "select cheie,denumire from 
>>conturi where id=\'\\$1\'" [list bpchar]]
>>    }
>>    spi_execp -count 1 $GD(conturi_lookup) [list $cont]
>>    return "{$cheie} {$denumire} $rulaj"
>>' LANGUAGE 'pltcl';
>>    
>>
>
>
>  
>
>>is giving the following error:
>>    
>>
>
>  
>
>>ERROR:  pltcl: can't read "cheie": no such variable
>>can't read "cheie": no such variable
>>    
>>
>
>I think what is happening is that the select is returning zero rows, and
>so none of the output variables get set.  You should be checking that
>spi_execp returns a value greater than 0 before trying to use the column
>variables.
>
>As for *why* the select returns zero rows, I think you want the query
>to read like
>	... where id=\\$1"
>As is, it's always looking for the literal id value $1.
>  
>

I have replaced:
... where id=\'\\$1\'
      with
... where id=\\$1

and the error is now:
ERROR:  Unable to identify an operator '=$' for types 'character 
varying' and 'integer'
        You will have to retype this query using an explicit cast

when I call the function like that:

select ruldeb('4:0:1:1:2:');

-------------
I have to say that that account '4:0:1:1:2:' exists in the "conturi" table!
As I said it previously, the query works fine directly (spi_exec) 
without the preparing stuff!

teo



In response to

Responses

pgsql-interfaces by date

Next:From: Constantin TeodorescuDate: 2002-10-14 14:34:47
Subject: Re: What's wrong in this pltcl function ?
Previous:From: Tom LaneDate: 2002-10-14 14:23:27
Subject: Re: What's wrong in this pltcl function ?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group