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.
In reply to How to detect postgresql RETURNING usage by Roland684
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |