Re: What's wrong in this pltcl function ?
От | Constantin Teodorescu |
---|---|
Тема | Re: What's wrong in this pltcl function ? |
Дата | |
Msg-id | 3DAAD536.8030603@flex.ro обсуждение исходный текст |
Ответ на | What's wrong in this pltcl function ? (Constantin Teodorescu <teo@flex.ro>) |
Ответы |
Re: What's wrong in this pltcl function ?
|
Список | pgsql-interfaces |
Tom Lane wrote: >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. > > 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
В списке pgsql-interfaces по дате отправления: