Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id C7DA7476585 for ; Mon, 14 Oct 2002 10:19:24 -0400 (EDT) Received: from relay.flex.ro (ns.flex.ro [193.230.255.2]) by postgresql.org (Postfix) with ESMTP id 2C42E476581 for ; Mon, 14 Oct 2002 10:19:24 -0400 (EDT) Received: from flex.ro (teo.flex.ro [193.230.255.11]) by relay.flex.ro (Postfix) with ESMTP id C4D0754AF5 for ; Mon, 14 Oct 2002 17:19:27 +0300 (EEST) Message-ID: <3DAAD271.5070702@flex.ro> Date: Mon, 14 Oct 2002 17:19:29 +0300 From: Constantin Teodorescu User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826 X-Accept-Language: en-us, en MIME-Version: 1.0 To: PostgreSQL Interfaces Subject: Re: What's wrong in this pltcl function? Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200210/33 X-Sequence-Number: 3195 Nigel J. Andrews wrote: > On Mon, 14 Oct 2002, Constantin Teodorescu wrote: > > > >> 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 >> while executing >> "return "{$cheie} {$denumire} $rulaj"" >> (procedure "__PLTcl_proc_1759991" line 12) >> invoked from within >> "__PLTcl_proc_1759991 4:0:1:1:2:" >> > > > > Looks like your prepared query is not finding any matching tuples. > > If a query returns 0 tuples then all column variables will be undefined. > Undefined because if you set them before then they will not be unset. > This > differs from the case where a tuple has been returned by the query but a > column's value is NULL. In this case the TCL variable is unset. > > > > I just imagined that but the question is why! Because the spi_exec on the original query without preparing anything works just fine! I mean: spi_exec "select cheie,denumire from conturi where id=\'$cont\'" seems that there is some problem at specifying the parameter list (or backsplashing the $ sign) teo