Warum fängst du die
Exception ab?
So weißt du doch gar nicht was schief lief.
Außerdem, da du jetzt DOA nutzt, würde ich dir Packages empfehlen.
DOA kann die automatisch so verpacken, dass du sie direkt in Delphi nutzen kannst, als wären sie Delphiklassen.
Aus Performancegründen, würde ich empfehlen, die Sequencewerte vorher in einem Rutsch zu holen, damit sämtliche Werte statisch sind oder aus gebundenen Bulk-listen kommen.
Delphi-Quellcode:
type TIDList is table of DBT_DATEN.ID%type;
type TDateList is table of DBT_DATEN.Zeit%type;
type TMessWertList is table of DBT_DATEN.MessWert%type;
procedure SetData(aData in TValueList) is
allIDs TIDList := TIDList();
allDates TDateList := TDateList();
allValues TMessWertList := TMessWertList();
begin
allIDs.Extend(aData.Count);
allDates.Extend(aData.Count);
allValues.Extend(aData.Count);
for i in aData.First .. aData.Last loop
SELECT Seq_Daten.NextVal
INTO allIDs(i)
FROM dual;
allDates(i) := aData(i).ODATETIME;
allValues(i) := aData(i).OVALUE;
end loop;
forall i in allIDs.First .. allIDs.Last
INSERT INTO dbt_Daten(ID, ID_MESSORT, ZEIT, MESSWERT)
VALUES (allIDS(i), MeasurementPointID, allDates(i) , allValues(i));
end;
btw, Enterprise manager stinkt! Schaue dir PL/
SQL Developer an, oder die Oracle IDEs von CoreLab.
btw2: Oracle erlaubt es einen Array als Datenquelle zu nutzen.
Deine originale SProc könnte also so aussehen:
SQL-Code:
INSERT INTO DBT_DATEN(ID, ID_MESSORT, ZEIT, MESSWERT)
SELECT SEQ_DATEN.NEXTVAL, MeasurementPointID, ODATETIME , OVALUE
FROM table(aData);