2009-10-29 25 views
6

Ich habe eine PL/SQL VArray, die ich mit einem BULK COLLECT Abfrage wie folgt bin Füllung:Kann ich eine PL/SQL-Sammlung teilen?

SELECT id 
BULK COLLECT INTO myarray 
FROM aTable 

Nun würde Ich mag ein Stück dieser Sammlung in einer anderen Sammlung passieren, so etwas wie :

newarray := myarray(2..5) 

Dies sollte die Elemente 2,3,4 und 5 von Myarray zu Newarray übergeben.

Ich könnte eine Schleife schreiben und die Elemente kopieren, aber gibt es eine kompaktere Möglichkeit, dies zu tun?

+0

Gute Idee, aber ich fand nicht kürzer als eine Schleife. – Christian13467

+0

Warum möchten Sie dies anstelle einer anderen selektiveren Auswahl tun? – David

+0

Weil ich die größte "Scheibe" einer bestimmten Bedingung bestimmen will. Die Überprüfung ist in einem komplizierteren Teil des Codes und ich nenne es mit immer kleineren Slices. – Thorsten

Antwort

3

Im Allgemeinen möchten Sie dies nicht tun. Sie haben eine große Sammlung im Speicher, und jetzt möchten Sie eine Kopie davon erstellen. Das würde sogar mehr Speicher verwenden. Normalerweise übergibt man in solchen Fällen die gesamte Sammlung (als Referenz, nicht als Wert) und stellt einen Start- und Stoppindex zur Verfügung. Überlassen Sie es den anderen Funktionen, nur den angegebenen Bereich zu bearbeiten.

+0

Nun, für meinen speziellen Anwendungsfall sehe ich nicht wirklich ein Problem, da ich mich hauptsächlich mit ziemlich kleinen Sammlungen beschäftigen werde (<10 Einträge - Ich habe die Wo-Kriterien in meiner Abfrage weggelassen). Der geringe Speicher-/Laufzeit-Overhead der Kopie scheint mir kleiner zu sein als die Code-Komplexität, die er einführen würde. – Thorsten

+0

+1, PL/SQL ist nicht C - keine Zeiger. – DCookie

+1

Nicht Zeiger genau, aber Sie können bei einem 'NOCOPY' Hinweis auf einen Parameter. Siehe http://www.dba-oracle.com/t_plsql_passing_data_structures_nocopy.htm –

Verwandte Themen