Re: What's wrong in this pltcl function ?
От | Constantin Teodorescu |
---|---|
Тема | Re: What's wrong in this pltcl function ? |
Дата | |
Msg-id | 3DAAD607.1040009@flex.ro обсуждение исходный текст |
Ответ на | What's wrong in this pltcl function ? (Constantin Teodorescu <teo@flex.ro>) |
Список | pgsql-interfaces |
Constantin Teodorescu wrote: > 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 Trying different versions for backspashing I found that the formula that works is: ... where id=\'\$1\' So without double backslashing the $ sign (thought I copied that example from a PostgreSQL documentation) Thanks, Teo
В списке pgsql-interfaces по дате отправления: