Thread: plperlu hash problem

plperlu hash problem

From
"Bart Degryse"
Date:
I have a little Perl problem. When I call function dbi_select_test like SELECT * from dbi_select_test() I get the expected result.
However when I call SELECT * from dbi_select I get an error message saying "ERROR:  error from Perl function: setof-composite-returning Perl function must call return_next with reference to hash at line 9." My perl knowledge seems to be too limited to find the solution myself. Can anyone help me out or refer me to a better suited forum? Thanks
 
CREATE OR REPLACE FUNCTION "public"."dbi_select_test" () RETURNS SETOF text AS
$body$
use DBI;
 
my $dbh = DBI->connect('dbi:Oracle:bmssa;host=firev120-1.indicator.be;sid=mars', 'bmssa', '********')
          or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare('SELECT * FROM address')
          or die "Couldn't prepare statement: " . $dbh->errstr;
$sth->execute() or die "Couldn't execute statement: " . $sth->errstr;
while (my $row = $sth->fetchrow_hashref) {
  return_next($$row{'ADDRTABLEID'});
}
$sth->finish;
return;
$body$
LANGUAGE 'plperlu' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
 
CREATE OR REPLACE FUNCTION "public"."dbi_select" () RETURNS SETOF "bmssa"."ADDRESS" AS
$body$
use DBI;
  my $dbh = DBI->connect('dbi:Oracle:bmssa;host=firev120-1.indicator.be;sid=mars', 'bmssa', '********')
            or die "Couldn't connect to database: " . DBI->errstr;
  my $sth = $dbh->prepare('SELECT * FROM address')
            or die "Couldn't prepare statement: " . $dbh->errstr;
  $sth->execute() or die "Couldn't execute statement: " . $sth->errstr;
  while (my %row = $sth->fetchrow_hashref) {
    return_next($row);
  }
  $sth->finish;
return;
$body$
LANGUAGE 'plperlu' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
 
CREATE TABLE "bmssa"."ADDRESS" (
  "ADDRTABLEID" TEXT,
  "ADDRRECID" TEXT,
  "LINENUM" TEXT,
  "TYPE" TEXT,
  "NAME" TEXT,
  "ADDRESS" TEXT,
  "PHONE" TEXT,
  "TELEFAX" TEXT,
  "COUNTRY" TEXT,
  "DEL_SWIFTNUMBER" TEXT,
  "ZIPCODE" TEXT,
  "STATE" TEXT,
  "COUNTY" TEXT,
  "TELEX" TEXT,
  "URL" TEXT,
  "PHONELOCAL" TEXT,
  "CELLULARPHONE" TEXT,
  "EMAIL" TEXT,
  "TAXGROUP" TEXT,
  "CITY" TEXT,
  "STREET" TEXT,
  "PAGER" TEXT,
  "SMS" TEXT,
  "REFZIPCODE" TEXT,
  "DATAAREAID" TEXT,
  "RECID" TEXT
) WITHOUT OIDS;

Re: plperlu hash problem

From
Richard Huxton
Date:
Bart Degryse wrote:
>   while (my %row = $sth->fetchrow_hashref) {
Well, that should be $row for a start.

>     return_next($row);
>   }

--   Richard Huxton  Archonet Ltd