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

Probleme bei SQL-Abfrage (ORA-00972): DBI

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Duff
 2007-04-17 15:47
#75987 #75987
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

ich bekomme in einer Funktion, in der ich ein Select-Statement anwenden möchte, folgende Fehlermeldung zurück:

Code: (dl )
DBD::Oracle::db selectall_arrayref failed: ORA-00972: identifier is too long (DBD ERROR: OCIStmtExecute/Describe) 


Habe in einer Variabel $sql, dass select-Statement und möchte das ganze so ausführen:

Code: (dl )
my $aref = $dbh->selectall_arrayref($sql,undef,$param) or die "Error: $DBI::errstr";


Danke.
D'OH
Daniel
renee
 2007-04-17 16:05
#75988 #75988
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und wie sieht das Statement aus?
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/
renee
 2007-04-17 16:06
#75989 #75989
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Oracle hat eine Beschränkung der Länge von Identifiern. Die maximale Länge ist 30 Zeichen.
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/
Duff
 2007-04-17 16:45
#75990 #75990
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

es handelt sich eigentlich um ein ganz normales select-Statement, welches ich auch so ausführen kann und welches mir auch ein Ergebnis zurück liefert.
Allerdings benutze ich ein like in dem select und möchte die übergebene Variable (z.B. kasjdfks%) auch so absetzen.

my $sql="Select feld1 from tabelle where feld2 like $param";

Wobei mein $param dann so aussieht: kasjdfks%.

Wenn ich das ganze in einem SQL-Programm absetze, muss ich beim like noch ' ' um die Variable setzen.
D'OH
Daniel
renee
 2007-04-17 16:55
#75991 #75991
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ist der Bezeichner für feld1 oder feld2 länger als 30 Zeichen?
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/
Duff
 2007-04-17 16:58
#75992 #75992
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Habe keinen Bezeichner gesetzt (weiß nicht wie).

Bekomme nun aber allerdings diese Fehlermeldung hier:

Code: (dl )
DBD::Oracle::db selectall_arrayref failed: ORA-00911: invalid character (DBD ERROR: OCIStmtExecute/Describe)


Muss ich die Variable mit askdjf% noch irgendwie escapen oder kann ich sie in 'askdjf%' setzen?
D'OH
Daniel
renee
 2007-04-17 17:08
#75993 #75993
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach aus
Code: (dl )
"Select feld1 from tabelle where feld2 like $param"


ein
Code: (dl )
Select feld1 from tabelle where feld2 like ?
und übergib $param als Parameter beim execute

Also
Code: (dl )
1
2
3
4
my $param = 'ksdf%';
my $stmt = "SELECT feld1 FROM tabelle WHERE feld2 LIKE ?";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->execute($param) or die $dbh->errstr;


Ansonsten musst Du mal checken, bei welchen EIngaben der Fehler auftritt und bei welchen nicht...
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/
renee
 2007-04-17 17:09
#75994 #75994
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Duff,17.04.2007, 14:58]Habe keinen Bezeichner gesetzt (weiß nicht wie).[/quote]
Du verwendest doch Spaltennamen in dem Statement. Das sind die Bezeichner...
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/
Duff
 2007-04-17 17:55
#75995 #75995
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Danke für die Antworten.

Wie soll ich denn am besten meine Ausgabe speichern?

Mit my $aref = $dbh->selectall_arrayref($sql) or die "Error: $DBI::errstr"; oder hast du noch eine bessere Variante/Idee?
D'OH
Daniel
bloonix
 2007-04-17 18:50
#75996 #75996
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Nun, Oracle schimpft schon, wenn man einen Identifier anlegen möchte,
der mehr als 30 Zeichen lang ist. Interessieren würde mich, wie du den
angelegt hast. :)

Verwendest du einen Alias für den Spaltennamen?

select foo f_o_o from bar

Der Alias ist in diesem Beispiel f_o_o.
Ist der Alias länger als 30 Zeichen?\n\n

<!--EDIT|opi|1176821469-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-04-17 15:47.