On Mon, Jun 29, 2009 at 04:06:23PM +0200, H.Merijn Brand wrote: > No database is perfect, but Oracle keeps causing massive hate > > $ cat test.pl > #!/pro/bin/perl > > use strict; > use warnings; > > use DBI; > use Data::Peek; > > my $dbh = DBI->connect ("dbi:Oracle:", (split m{/} => $ENV{DBUSER}), { > AutoCommit => 1, > RaiseError => 1, > PrintError => 1, > ChopBlanks => 1, > ShowErrorStatement => 1, > FetchHashKeyName => "NAME_lc", > }); > > $dbh->do ("create table foo (c_foo numeric (4) not null primary key)"); > $dbh->do ("insert into foo values (1)"); > > DDumper [ "foo", $dbh->primary_key (undef, "PROLEP", "foo") ]; > DDumper [ "FOO", $dbh->primary_key (undef, "PROLEP", "FOO") ]; > > $dbh->do ("drop table foo"); > $ perl test.pl > $VAR1 = [ > 'foo' > ];
i.e. it didn't find a table called 'foo' > $VAR1 = [ > 'FOO', > 'C_FOO' > ]; > $ but it did find a table called 'FOO'. I suspect that's the right behaviour. The 'Catalog Methods' section of the DBI docs says: Most arguments in the catalog methods accept only ordinary values, e.g. the arguments of "primary_key_info()". Such arguments are treated as a literal string, i.e. the *case is significant* and quote characters are taken literally. Oracle is one of those databases that uppercases (unquoted) names. That's perfectly valid behaviour - though it can be a major pain. > I found out last week that MySQL is even worse, as it prohibits the use > of a space before a paren in aggregate functions. But that is not on > topic here. True, though I believe there's a config option to control that (a trade-off with some other feature that I don't now recall). Tim.