Danke Dir, ich habe damit mal ein bisschen rumgespielt. Auf der
SQL-Seite ist es (derzeit) kein Problem.
Nur ich bekomme das Array / die Liste / das Objekt nicht aus Delphi rüber. Habe es mit AnyDAC1 probiert. Ich schaffe es nicht, der Komponente das Objekt zu übergeben / bzw. ihm den Datentyp TIntegerList bekannt zu machen.
Auf .Net wollte ich jetzt nicht umsteigen.
Edit:
Viele Varianten versucht und eine ist bisher geglückt.
Ich habe deine Idee eines Tabellentyps übernommen:
create or replace type DeinSchema.TIntegerList is table of Integer;
Meine Test-SP sieht mal so aus:
SQL-Code:
Create or Replace Procedure DB1.Test
(Daten in TIntegerList, Amount in Integer, Res out Integer)
is
i Integer; -- for future use *g*
begin
res:=Daten(Amount);
end;
Und in Delphi habe ich auf Grund
dieses Threads
mit den Direct Oracle
Access Komponenten folgendes implementiert:
Delphi-Quellcode:
var oraObj:TOracleObject;
begin
oraObj:=TOracleObject.Create(OracleSession1,'TIntegerList','');
try
oraObj.Elements[0]:=13;
oraObj.Elements[1]:=20;
OracleQuery1.DeclareVariable('Daten',otObject);
OracleQuery1.DeclareandSet('Amount',otInteger,1);
OracleQuery1.DeclareVariable('Res',otInteger);
OracleQuery1.SetComplexVariable('Daten',oraObj);
OracleQuery1.SQLW:='begin test(:Daten, :Amount, :Res); end;';
ORacleQuery1.Execute;
finally
OraObj.Free;
end;
showmessage(OracleQuery1.GetVariable('Res')); // --> 13
//OracleQuery1.Close;
end;
Funktioniert.
(Jetzt nagel ich mich hoffentlich nicht zu sehr mit den Komponenten auf Oracle fest. Wobei ich jetzt auch nicht die Machbarkeit dieser SP in
mySQL beurteilen kann.)
Jetzt interessiert mich natürlich die Funktionalität dahinter. Und: Warum geht es mit
ADO oder anyDAC nicht? Vielleicht war ich nur zu blöd (bei letzterem).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.