Bob,
thanks! That worked fine. Went with no. 2 . No, those are not the original
table and column names. Thanks again for takin the time.
Mark

----- Original Message -----
From: "Bob Showalter" <[EMAIL PROTECTED]>
To: "'Mark Martin'" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Tuesday, June 03, 2003 2:02 PM
Subject: RE: DBI and Unique Keys


> [Mark: please post only plain text, and don't top-post. I've moved your
> reply to the bottom]
>
> Mark Martin wrote:
> > ----- Original Message -----
> > From: "Bob Showalter" <[EMAIL PROTECTED]>
> > To: "'Mark Martin'" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
> > Sent: Monday, June 02, 2003 2:14 PM
> > Subject: RE: DBI and Unique Keys
> >
> >
> > > Mark Martin wrote:
> > > > Hi,
> > > > I have an Oracle table with a Unique Key which is generated by a
> > > > trigger :
> > > >
> > > > CREATE TRIGGER MYTRIGGER
> > > > before insert on MYTABLE
> > > > for each row
> > > > begin
> > > > select MYSEQUENCE.nextval into :new.MYCOLUMNAME from dual; end;
> > > > And this works fine on normal insert
> > > >
> > > > When I try to insert from a perl script I get the following :
> > > > ORA-00947: not enough values
> > >
> > > Need to see your SQL.
> > >
> > > >
> > > > When I try to add an extra placeholder for the value the will
> > > > be generated by the trigger I get the following : execute
> > > > failed: called 28 bind variables when 29 are needed
> > >
> > > You need to supply an additional bind variable (value doesn't
> > > matter). Again, we need to see the code.
> > >
> > Bob,
> > here is the code with SQL embedded. It's a very simple extract from
> > one Dbase and insert into another :
> >
> > #!/usr/bin/perl
> > use CGI qw(fatalsToBrowser);
> > use DBI; use DBD::Oracle;
> >
> > $dbh1 = DBI->connect( "dbi:Oracle:SOURCE_SID", "username", "pword" )
> > or die "Can't connect to Oracle database: $DBI::errstr\n"; $dbh2 =
> > DBI->connect( "dbi:Oracle:TARGET_SID", "username", "pword" ) or die
> > "Can't connect to Oracle database: $DBI::errstr\n";
> >
> > my $sql1 = qq{SELECT FIELD1, FIELD2, FIELD3, FIELD4, ...........
> > FIELD10 FROM SOURCE_TABLE}; my $sql2 = qq{INSERT INTO TARGET_TABLE
> > VALUES (?,?,?,?,?,?,?,?,?,?)};
>
> Is that really your table and column names?
>
> Anyway, I'm just guessing (since I can't see the actual table structure)
> that TARGET_TABLE has one more column than SOURCE_TABLE, and that the
number
> of ? marks in the values list above is one less than the number of columns
> in TARGET_TABLE. The extra column gets an initial value from the trigger,
> right?
>
> If that's true, you have two choices here:
>
> 1. Specifically list the columns for which you are supplying values:
>
>    insert into target_table (foo, bar, baz) values (?, ?, ?)
>                             ^^^^^^^^^^^^^^^
>                             column list here
>
> 2. Provide an additional value in the values list. If the extra column is
> the first column in the table, then do something like this:
>
>    insert into target_table value (0, ?, ?, ?)
>                                    ^
>                                    extra value here
>
> The trigger will change the 0 to the appropriate value.
>
> The safest, though most verbose method is #1, as it makes no assumptions
> about the order of columns in the table.
>
> >
> > my $sth1 = $dbh1->prepare($sql1) or die "Can't prepare SQL statement:
> > $DBI::errstr\n"; $sth1->execute or die "Can't execute SQL statement:
> > $DBI::errstr\n";
> >
> > while (my @row = $sth1->fetchrow) {
> >                     chomp;
> >
> >                      $var1 = $row[0];
> >                      $var2 = $row[1];
> >                      .
> >                      .
> >                      .
> >                      $var10 = $row[9];
> >
> >                      my $sth2 = $dbh2->prepare($sql2) or die "Can't
> >                     prepare SQL statement: $DBI::errstr\n";
> >                     $sth2->execute($var1,$var2........$var10) or
> > print "WARNING: Can't execute SQL statement 2: $DBI::errstr\n"; }
> > $dbh1 ->disconnect(); $dbh2 ->disconnect(); exit;
> >
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to