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