Hi!

I'm working with oracle, and wanting to manipulate the NLS_DATE_FORMAT.  I
know I can change it in the init.ora file for my database, but I don't want
to affect all objects in the db, just my schema.  So I wrote a trigger to
help me out:

CREATE OR REPLACE TRIGGER init_date
AFTER LOGON ON user.schema
BEGIN
        EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT="YYYY/MM/DD
HH:MI:SS"';
END;

It compiles, cool.  So now I fire up SQLPLUS (connected as the user
specified in the trigger) and I do this:

SQL> select sysdate from dual;

SYSDATE
-------------------
2002/03/13 01:51:07

Voila!  Everything works!  So, now I write a snippet of perl, using DBI
(unecessary declarations removed for brevity):

  my $dbh = DBI->connect("dbi:Oracle:SID", "user", "password");
  my $sth = $dbh->prepare("SELECT sysdate FROM dual");
  $sth->execute();
  while(my $ref = $sth->fetchrow_arrayref()) {
          print $ref->[0]."\n";
  }

Fully expecting this to work, I execute it, and I get:

13-MAR-02

So I check that I'm using the right user, yup.  I check using SQLPLUS again,
yup.  So I add this to the program:

$dbh->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH:MI:SS'");

And I execute it:

2002-03-13 01:54:35

Well, at least it works.

So can someone help me understand why it behaves this way?  The trigger
fires perfectly when I use SQLPLUS, when I connect via TOAD (an Oracle
'IDE'), and when I run use Java & JDBC for the same query.  It only shows up
when I connect via DBI.

Thanks!

Cory 'G' Watson
* What is the sound of Perl? Is it not the sound of a wall that people have 
stopped banging their heads against?

Reply via email to