Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3382[/thread]

DBD::ORACLE  -> Script bricht ab: Eine Frage zum DBD



<< >> 8 Einträge, 1 Seite
Tronde
 2003-12-08 15:48
#35755 #35755
User since
2003-11-13
10 Artikel
BenutzerIn
[default_avatar]
HI Ihr alle,

Da bin ich nun wieder mit einer Datenbanktreiberfrage.
Leider bricht ein Script von mir ab, wenn ich einen Wert in eine Tabelle einfügen will, wo die Spalte zu klein für den wert ist.

Ich hätte es aber gerne, dass das Script weiterläuft und ich den Fehler behandeln kann.

Weiß wer wie das geht?

Die Genaue Fehlermeldung ist:

DBD::Oracle::st execute failed: ORA-01438: value larger than specified precision allows for this column (DBD ERROR: OCIStmtExecute) at ...

DER FEHLER an sich ist richtig, nur möchte ich ihn anders behandeln...

Hoffe von euch weiß wer weiter,

Tronde
renee
 2003-12-08 15:58
#35756 #35756
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
#... vorheriger Code
$dbh->execute() or &handle_error();
#... der weitere Code

sub handle_error{
print "Es ist ein Fehler beim Einfügen in die Datenbank aufgetreten...\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2003-12-08 17:48
#35757 #35757
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
poste mal die Zeilen mit dem connect und den dafuer verwendeten parametern...\n\n

<!--EDIT|Strat|1070898553-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tronde
 2003-12-08 18:05
#35758 #35758
User since
2003-11-13
10 Artikel
BenutzerIn
[default_avatar]
use strict;
       use Cwd;                        # useing the module to work with the directories
       use DBD::Oracle;
       use DBI qw(:sql_types);         # DBI-Modules
       
           my $host="";
       my $Oracle_SID="";
       my $ORACLE_HOME="";
       my $user="";
       my $passwd="";
       my $error;
       
       my $connection="dbi:Oracle:host=$host;sid=$Oracle_SID";
my $db = DBI->connect($connection,$user,$passwd,{PrintError => 0,AutoCommit=>0});



my $shuh = "Update tabelle set q=1000000000 where cust_nb='9999999'";
  my $vdh=$db->prepare($shuh);
       #test
       $vdh->execute() ;
       
       
       if($vdh->err)
       {
               my $errstr=$vdh->errstr;
               print "\n FAIL  ".$errstr." Order :  UPDATING tabelle  Line in File ";
               $db->rollback();
               $error=1;
       }
               
       $vdh->finish();
       
$db->disconnect;

print "\n $error \n";


TUT was es soll.



Habe in einem Längerm Script die selben (!) angaben.. und da macht das Update eben die Probleme...

Nichts für ungut renee, aber es hat net geholfen.\n\n

<!--EDIT|Tronde|1070899591-->
Strat
 2003-12-08 18:53
#35759 #35759
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
1. hilft es was, wenn du die verbindung so oeffnest:
Code: (dl )
1
2
3
4
5
6
7
8
my $db = DBI->connect(
 $connection, $user, $passwd,
 {
   PrintError => 0,
   AutoCommit=>0,
   RaiseError => 0,
 }
);


2. es fuehrt oft zu ziemlich schwer zu findenden problemen, wenn man die ergebnisse vom prepare nicht abfragt, z.B.:
Code: (dl )
1
2
3
   my $vdh=$db->prepare($shuh) or die "Error in prepare: ", $db->errstr;
   $vdh->execute();
   if ($vdh->err) .....


3. Bei Update ist kein prepare/execute noetig, sondern besser ein do:
Code: (dl )
1
2
3
unless ($db->do($shuh)) {
 die "Error in do: ", $db->errstr;
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tronde
 2003-12-09 15:12
#35760 #35760
User since
2003-11-13
10 Artikel
BenutzerIn
[default_avatar]
Hi,

alles waren vielversprechende Tipps, nur brachte das ersetzten des prepare / execute zu do auch nur diese Meldung hervor:
Code: (dl )
1
2
3
DBD::Oracle::db do failed: O
RA-01438: value larger than specified precision allows for this column (DBD ERRO
R: OCIStmtExecute)

Der Fehler is ok, und gewollt.


Allerdings brach das Script trotzdem noch ab, obwohl ich
Code: (dl )
1
2
$db = DBI->connect($connection,$user,$passwd,{PrintError => 0,AutoCommit=>0,Rais
eError => 0});


zur verbindungs initialisierung nutze...

Das eigentlich merkwürdige ist ja das es in dem Script was ich zu gepostet habe funktioniert, aber in einem längerem Script mit Funktionen nicht mehr.

Kann es an use strict liegen, wenn ich Datanbankhandels in Funktionen erschaffe?

Ich bin mit meinem Latein am ende...

THX

Tronde
Strat
 2003-12-09 15:55
#35761 #35761
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
eigentlich kann das nicht an use strict liegen... was vielleicht noch helfen koennte ist, das ->do(...) in einen eval-Block zu haengen:
Code: (dl )
1
2
3
4
5
6
eval {
$db->do(....);
};
if ($@) { # fehler ist aufgetreten, fehlermeldung in $@
...
}


aber wenn es in einem kuerzeren Script funktioniert, solltest du wohl eher die ursache suchen als die auswirkung bekaempfen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tronde
 2003-12-09 16:47
#35762 #35762
User since
2003-11-13
10 Artikel
BenutzerIn
[default_avatar]
Leuts.. ich habs...

Ich danke euch allen für eure anregungen...

Ich war einfach zu blind..

In einer der Unterfunktionen wurde RaiseError noch mal überschrieben...

T'schuldigt die Aufregung...

Bye

Tronde
<< >> 8 Einträge, 1 Seite



View all threads created 2003-12-08 15:48.