Re: What's wrong in this pltcl function ? - Mailing list pgsql-interfaces

From Tom Lane
Subject Re: What's wrong in this pltcl function ?
Date
Msg-id 12147.1034605407@sss.pgh.pa.us
Whole thread Raw
In response to What's wrong in this pltcl function ?  (Constantin Teodorescu <teo@flex.ro>)
List pgsql-interfaces
Constantin Teodorescu <teo@flex.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.
        regards, tom lane


pgsql-interfaces by date:

Previous
From: Constantin Teodorescu
Date:
Subject: Re: What's wrong in this pltcl function?
Next
From: Constantin Teodorescu
Date:
Subject: Re: What's wrong in this pltcl function ?