Matthias: Aufruf einer Oracle-Funktion mittels Perl

Beitrag lesen

Hallo,

vielleicht kann mir hier jemand einen kleinen Tip geben, ich kriege es einfach nicht auf die Reihe :-(

Ich habe in Oracle eine Funktion in einem Package definiert:

IMPORT (FUNCTION) <return value>       VARCHAR2 OUT
IMPORT            ID                   NUMBER   IN
IMPORT            BRUTTO               NUMBER   IN
IMPORT            NETTO                NUMBER   IN
IMPORT            BESCHREIBUNG         VARCHAR2 IN
IMPORT            FIRMA                VARCHAR2 IN
IMPORT            X                    NUMBER   IN
IMPORT            Y                    NUMBER   IN
IMPORT            Z                    NUMBER   IN
IMPORT            ACHSE                VARCHAR2 IN
IMPORT            EINGANG              VARCHAR2 IN
IMPORT            FEHLER               VARCHAR2 IN
IMPORT            DATEI_1              BLOB     IN
IMPORT            DATEI_2              BLOB     IN

Über PL/SQL kann ich die Funktion ohne Fehler wie folgt aufrufen:

declare
  out VARCHAR2(500);
begin
  out := my_func(123, null, null, null, null, null, null, null, null, 'BEISPIEL', 'TEST', null, null);
  dbms_output.put_line('Function returns ' || out || '.');
end;

Das gleiche mittels DBI in Perl sieht so aus:

my $out;

my $sth = ${dbh}->prepare("BEGIN ? := my_func(?,?,?,?,?,?,?,?,?,?,?,?,?); END;") || exit 1;

${sth}->execute($out, $id, undef, undef, undef, undef, undef, undef, undef, undef, $eingang, $fehler, undef, undef) || exit 1;

id, eingang und fehler sind gleich wie oben.

Beim Aufruf erhalte ich allerdings den folgenden Fehler:

DBD::Oracle::st execute failed: ORA-06550: line 1, column 14:
PLS-00306: wrong number or types of arguments in call to 'MY_FUNC'
ORA-06550: line 1, column 14:
PLS-00306: wrong number or types of arguments in call to 'MY_FUNC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored (DBD ERROR: error possibly near <*> indicator at char 13 in 'BEGIN :p1 := <*>my_func(:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11,:p12,:p13,:p14); END;') [for Statement "BEGIN ? := my_func(?,?,?,?,?,?,?,?,?,?,?,?,?); END;" with ParamValues: :p5=undef, :p12='TEST', :p8=undef, :p14=undef, :p10=undef, :p13=undef, :p2='123', :p3=undef, :p6=undef, :p7=undef, :p1=undef, :p4=undef, :p9=undef, :p11='BEISPIEL'] at ./test.pl line 91.

Anzahl und Typ der Argumente stimmt imho. Ich steh hier total auf dem Schlauch.

Vielen Dank im voraus,
Matthias