Roland684 has asked for the wisdom of the Perl Monks concerning the following question:
can be done in one single (and safer) statement like this:INSERT INTO table (name) VALUES ("Roland684"); SELECT id FROM table WHERE name = "Roland684";
Nice!INSERT INTO table (name) VALUES ("Roland684") RETURNING id;
I've also written a general purpose subroutine that handles SQL-queries, passed to it as a string. And this combination is where some wisdom is required.
How can I check if there are any values returned?
When I execute a query without the RETURNING clause, $sth->fetch will produce the warning message "DBD::Pg::st fetchrow_hashref failed: no statement executing".
While the following code works for both insert/update statements with the returning clause and select statements, even when no records are returned, it fails for insert/update statement without the RETURNING clause.
(and with 'fails' I mean that it works correctly, but also produces an warning.)my $sth = $dbh->prepare($query); my $insertedrecords = $sth->execute; while (my $result = $sth->fetchrow_hashref) { ... }
I could check the sql query for the existence of the sub-string " RETURNING ", but we can all imaging when this will fail. Properly parsing the query seems too far fetched, there has to be a simpler way.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to detect postgresql RETURNING usage
by ikegami (Patriarch) on Sep 06, 2010 at 17:18 UTC | |
by Roland684 (Novice) on Sep 07, 2010 at 11:59 UTC | |
by ikegami (Patriarch) on Sep 07, 2010 at 16:29 UTC | |
|
Re: How to detect postgresql RETURNING usage
by moritz (Cardinal) on Sep 06, 2010 at 17:41 UTC | |
by ikegami (Patriarch) on Sep 06, 2010 at 17:53 UTC | |
|
Re: How to detect postgresql RETURNING usage
by bart (Canon) on Sep 08, 2010 at 13:56 UTC |