ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
732
732
EMPFEHLEN
-
Hallo,
ich hab mal wieder eine Frage:
Ich habe verschiedene varchar2 Einträge in einen varray.
Jetzt sollen neue Einträge in dieses varray gemacht werden, allerdings ohne dubletten. Soll heißen: ist der neue Eintrag schon in dem varray vorhanden, soll er nicht eingetragen werden.
Die Methode Exists prüft ja nur, ob ein Element an der Stelle n vorhanden ist, prüft aber nicht den Wert.
Gibt es dafür eine Methode in PL/SQL (Oracle 10g) oder muss ich mir da selber eine Funktion schreiben?
MfG
sceppi
-
01.07.08 11:44 #2
PL/SQL kennt dafür keine Methode, d.h. du müsstet dafür schon in einer Schleife durch alle Werte durchlaufen und vergleichen.
Eventuell solltest du stattdessen eher eine temporäre Tabelle in Betracht ziehen und mit einem Unique Key arbeiten und die Eindeutigkeit mit Datenbankmitteln sicherstellen. (Dafür ist sie auch optimiert!)liebe Grüße
Exceptionfault (http://exceptionfault.de)
Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008
-
Hallo Exceptionfault,
wiedereinmal danke für deine Hilfe.
Ich hab das ganze in einer Schleife gelöst.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
FUNCTION checkDouble(aV vArray, sVergleich varchar2) Return boolean is Result boolean := false; i integer; BEGIN FOR i IN 1 .. aV.COUNT LOOP if aV(i) = sVergleich then Result := true; return Result; END IF; END LOOP; return Result; END checkDouble;
aV ist ein varray mit Strings...
-
01.07.08 12:46 #4
Schleifen sind für meinen Geschmack immer schlecht, da die Performance im schlimmsten Fall linear zur Anzahl der Elemente in deinem Array abnimmt. Mit einer temporären Tabelle und einem Unique Key passiert dies nicht, da ein Indexzugriff auf die Tabelle über einen B*Tree Baum wie ihn Oracle benutzt, für alle Elemente den selben Aufwand bedeutet, unabhängig von der Anzahl der Elemente. Der Aufwand bleibt selbst bei Milliarden von Zeilen minimal.
Selbstverständlich kommt es auch ein bisschen drauf an, was du mit den Daten machen willst, und woher sie kommen. Wenn die Daten hinterher in Tabellen landen sollen, und vielleicht sogar noch aus Tabellen kommen, würde ich auf jeden Fall den Weg über Temporäre Tabellen gehen. Somit bleiben die Daten stets in der "SQL" Ebene von Oracle und müssen nicht in die "PL/SQL Ebene" transferiert werden. Mein Ansatz ist immer:
1.) Versuche das Problem mit SQL zu lösen, dafür ist die Datenbank da. Dort ist sie schnell. Es wird keine Prozedur geben, egal ob C, C++ oder PL/SQL das diese Aufgabe schneller erledigen kann.
2.) Versuche das Problem in PL/SQL zu lösen, zumindest solange es ein datentechnisches Problem und kein Berechnungsproblem ist. Für komplizierte Berechnungen ist C oder C++ die erste Wahl. Bei Massendatenverarbeitung geht jedoch nichts über PL/SQL. Kein Stück Software arbeitet näher an den Daten als die PL/SQL Engine von Oracle.
3.) Wenn 1.) und 2.) nicht ausreichen... Die Aufgabe überdenken
4.) .NET oder Java als Stored Procedures in Erwägung ziehen.
5.) Code zur Verarbeitung in den Client, als LETZTE Variante.
Ich schau mal ob ichs bis heute Abend schaffe dein Beispiel mit Temporärer Tabelle aufzubauen...liebe Grüße
Exceptionfault (http://exceptionfault.de)
Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008
-
Ähnliche Themen
-
Applescript: Vorhandensein einer Datei prüfen
Von einfach nur crack im Forum Coders TalkAntworten: 1Letzter Beitrag: 14.09.09, 15:46 -
Objekt auf Existenz prüfen
Von A319 im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 17.06.08, 00:13 -
VARRAY als Parameter bei SP aufruf ORACLE
Von cullmann im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 21.02.07, 19:35 -
Klassen-Attribute auf vorhandensein Prüfen
Von mojitoweb im Forum PHPAntworten: 2Letzter Beitrag: 29.11.05, 14:12 -
Prüfen auf vorhandensein eines Cookies
Von piti66 im Forum PHPAntworten: 17Letzter Beitrag: 02.08.05, 20:15





Zitieren
Login





