Обсуждение: &main::execute undefined?
Ok, I'm running Postgres and RH8 right out-of-the-box. DBD::Pg is installed, and I'm using Perl 5.8 -- all right out-of-the-box. When my script gets to this line:
$statementH = execute() || die $statementH->errstr ; # this is line 10 btw
I get:
Undefined subroutine &main::execute called at ./test.pl line 10.
As far as I can tell, it should work --but doesn't so I must be missing something. If you want to tackle this one, everything is right below: (PS: the query going into $sql I got with help of you all, so thanks!)
========
#! /usr/bin/perl -w
use DBI ;
$dbH = (DBI->connect("DBI:Pg:dbname=lanparty-reservations","andrew","shrp1234")) ;
$sql = "select c.relname as table from pg_class c where c.relkind = 'r' and c.relname !~ '^pga_' and c.relname !~ '^pg_'" ;
$statementH = $dbH->prepare($sql) ;
$statementH = execute() || warn $statementH->errstr ;
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now
On Thu, 2002-11-21 at 05:37, Andrew Magnus wrote:
>
> Ok, I'm running Postgres and RH8 right out-of-the-box. DBD::Pg is
installed, and I'm using Perl 5.8 -- all right out-of-the-box. When my
...
> Undefined subroutine &main::execute called at ./test.pl line 10.
...
> ========
>
> #! /usr/bin/perl -w
>
> use DBI ;
>
>
> $dbH = (DBI->connect("DBI:Pg:dbname=lanparty-reservations","andrew","shrp1234")) ;
> $sql = "select c.relname as table from pg_class c where c.relkind = 'r' and c.relname !~ '^pga_' and c.relname !~
'^pg_'";
>
> $statementH = $dbH->prepare($sql) ;
> $statementH = execute() || warn $statementH->errstr ;
$statementH->execute() || warn $statementH->errstr ;
$relname = $statementH->fetchrow_array();
$statementH->finish();
--
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight, UK
http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"A new commandment I give unto you; That ye love one
another. As I have loved you, so ye also must love one
another. By this shall all men know that ye are my
disciples, if ye have love one to another."
John 13:34,35
Thanks, but it still doesn't work. :-(
For everyone else, the error I'm getting is:
Undefined subroutine &main::execute called at ./test.pl line 10.
where line 10 is:
$statementH = execute() || warn $statementH->errstr ;
Oliver Elphick <olly@lfix.co.uk> wrote:
On Thu, 2002-11-21 at 05:37, Andrew Magnus wrote:
>
> Ok, I'm running Postgres and RH8 right out-of-the-box. DBD::Pg is
installed, and I'm using Perl 5.8 -- all right out-of-the-box. When my
...
> Undefined subroutine &main::execute called at ./test.pl line 10.
...
> ========
>
> #! /usr/bin/perl -w
>
> use DBI ;
>
>
> $dbH = (DBI->connect("DBI:Pg:dbname=lanparty-reservations","andrew","shrp1234")) ;
> $sql = "select c.relname as table from pg_class c where c.relkind = 'r' and c.relname !~ '^pga_' and c.relname !~ '^pg_'" ;
>
> $statementH = $dbH->prepare($sql) ;
> $statementH = execute() || warn $statementH->errstr ;
$statementH->execute() || warn $statementH->errstr ;
$relname = $statementH->fetchrow_array();
$statementH->finish();
--
O liver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight, UK
http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"A new commandment I give unto you; That ye love one
another. As I have loved you, so ye also must love one
another. By this shall all men know that ye are my
disciples, if ye have love one to another."
John 13:34,35
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now
On Thu, Nov 21, 2002 at 10:46:09AM -0800, Andrew Magnus wrote: > Thanks, but it still doesn't work. :-( > > For everyone else, the error I'm getting is: > > Undefined subroutine &main::execute called at ./test.pl line 10. > > where line 10 is: > > $statementH = execute() || warn $statementH->errstr ; You need to read the documentation for DBI. What Oliver's terse example was saying is that you are using the wrong syntax. execute() is a statement handle method, not a method for creating a statement handle. Read the docs - perldoc DBI mike > Oliver Elphick <olly@lfix.co.uk> wrote: > $statementH->execute() || warn $statementH->errstr ; > $relname = $statementH->fetchrow_array(); > $statementH->finish();
>
> Thanks, but it still doesn't work. :-(
>
> For everyone else, the error I'm getting is:
>
> Undefined subroutine &main::execute called at ./test.pl line 10.
>
> where line 10 is:
>
> $statementH = execute() || warn $statementH->errstr ;
Read Oliver's message again. The execute() is a method not a function in
main's namespace.
$statementH->execute() is the way to call it. Read the DBI documentation
for examples.
- Richard Huxton
>
> Oliver Elphick <olly@lfix.co.uk> wrote:On Thu, 2002-11-21 at 05:37,
> Andrew Magnus wrote:
>>
>> Ok, I'm running Postgres and RH8 right out-of-the-box. DBD::Pg is
> installed, and I'm using Perl 5.8 -- all right out-of-the-box. When my
> ...
>> Undefined subroutine &main::execute called at ./test.pl line 10.
> ...
>> ========
>>
>> #! /usr/bin/perl -w
>>
>> use DBI ;
>>
>>
>> $dbH =
>> (DBI->connect("DBI:Pg:dbname=lanparty-reservations","andrew","shrp1234"))
>> ;
>> $sql = "select c.relname as table from pg_class c where c.relkind = 'r'
>> and c.relname !~ '^pga_' and c.relname !~ '^pg_'" ;
>>
>> $statementH = $dbH->prepare($sql) ;
>> $statementH = execute() || warn $statementH->errstr ;
>
> $statementH->execute() || warn $statementH->errstr ;
> $relname = $statementH->fetchrow_array();
> $statementH->finish();
>
> --
> Oliver Elphick Oliver.Elphick@lfix.co.uk
On Thu, 2002-11-21 at 18:46, Andrew Magnus wrote:
>
> Thanks, but it still doesn't work. :-(
In what way?
> For everyone else, the error I'm getting is:
>
> Undefined subroutine &main::execute called at ./test.pl line 10.
>
> where line 10 is:
>
> $statementH = execute() || warn $statementH->errstr ;
You can't do that. execute is part of the DBI package, so you can't
just call it as if it were declared in your own program. The way I said
is the standard way to do it, so what goes wrong with that?
> Oliver Elphick <olly@lfix.co.uk> wrote:On Thu, 2002-11-21 at 05:37, Andrew Magnus wrote:
...
> $statementH->execute() || warn $statementH->errstr ;
From "man 3 DBI":
The typical method call sequence for a "SELECT" statement is:
prepare,
execute, fetch, fetch, ...
execute, fetch, fetch, ...
execute, fetch, fetch, ...
for example:
$sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");
$sth->execute( $baz );
while ( @row = $sth->fetchrow_array ) {
print "@row\n";
}
--
Oliver Elphick Oliver.Elphick@lfix.co.uk
Isle of Wight, UK
http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839 932A 614D 4C34 3E1D 0C1C
========================================
"Can two walk together, except they be agreed?"
Amos 3:3