Zurücksetzen eines Assoziativen Arrays in PL/SQL?

Dies ist einer dieser "es muss einen besseren Weg" Fragen. Lassen Sie mich das problem aus, ich gebe dir dann meine gehackt Lösung, und vielleicht können Sie vorschlagen, eine bessere Lösung. Danke!

Nehmen wir diese kleinen Leckerbissen von PL/SQL

DECLARE
 TYPE foo_record IS RECORD (foo%type, bar%type);
 TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
 arr_foos foo_records;

 CURSOR monkeys is SELECT primates FROM zoo;
 row_monkey monkeys%rowtype;
BEGIN
 FOR row_monkey IN monkeys loop
  /*
    at this point in each iteration I need to have the associative array 
    arr_foos in its original state. if this were java, I'd declare it 
    right here and its scope would be limited to this iteration. However, 
    this is not java, so the scope of the array is effectively global and 
    I can't have one iteration's data meddle with the next.
  */
  null;
 END LOOP;
END;

Macht das Sinn? Ich im Grunde benötigen, um es zurückzusetzen, um etwas. Wenn es eine Nummer, die bei null beginnt, konnte ich nur sagen, Zahl:=0; am Anfang jeder iteration und mit ihm getan werden. Aber dies ist nicht eine Zahl, es ist eine Art, die ich kann nur reset mit einem sauberen,: =0.

Sowieso, auf meinem hack:

DECLARE
 TYPE foo_record IS RECORD (foo%type, bar%type);
 TYPE foo_records IS TABLE OF foo_record INDEX BY PLS_INTEGER;
 arr_foos foo_records;
 arr_foos_reset foo_records;

 CURSOR monkeys is SELECT primates FROM zoo;
 row_monkey monkeys%rowtype;
BEGIN
 FOR row_monkey IN monkeys loop
  arr_foos := arr_foos_reset;
  null;
 END LOOP;
END;

Ich dachte, dass wenn ich verwalten können, um zu bewahren, ein Mitglied des gleichen Typs in einem originalen Zustand ist, dann kann ich nur die working-variable zurück auf das, was der Wert des Originals. Und, erstaunlich genug, funktioniert es (denke ich.) Aber es muss einen besseren Weg geben. Kann mir jemand helfen?

T'anks!

  • Geringfügige nitpick: Sie brauchen nicht zu erklären row_monkey monkeys%rowtype;. Eine cursor-FOR-Schleife wie diese nicht die Erklärung für Sie, und beschränkt sich auf die Schleife. In diesem code wird die variable deklariert ist doppelt, der innere version Schatten der Außenmauer. Es ist nicht ein problem, obwohl ich dachte, ich möchte hinzufügen das für jemand anderes zu Lesen.
InformationsquelleAutor steve | 2009-11-13
Schreibe einen Kommentar