Frage

Nehmen wir an, ich habe eine Funktion, in der ich mehrere Aktionen ausführen muss, die alle von den Ergebnissen einer Abfrage abhängen. Alles, was ich gefunden habe, zeigt an, dass ich eine Temperaturtabelle außerhalb des Verfahrens definieren muss, was ich nicht tun möchte.

Ich würde gerne so etwas wie Folgendes machen:

create or replace function f_example(
  a_input in number
)
return varchar2 is
begin
  create local temporary table tempIDs
  ( 
    testID number(6, 0)
    , testValue number(8,0)
  );

  //select data from tableFoo that will be overwritten by a_input into tempIDs

  //update data in tableFoo with a_input & store old data in another tableFoo field

end f_example;

Diese Syntax funktioniert nicht. Oracle erlaubt nicht zu, in einer Funktion "Erstellen" zu erstellen.

Ich bin nicht wirklich ein Datenbankprogrammierer - ich bin es gewohnt, in C# und Java zu arbeiten. In diesem Fall würde ich meine Werte in einem örtlichen Array (oder was auch immer) speichern, das aus dem Spielraum ausgeht, wenn die Methode beendet ist. Gibt es in Oracle SQL zu Recht keine Möglichkeit, so etwas zu tun?

War es hilfreich?

Lösung

Sie können einen PL/SQL -Datensatztyp und den zugehörigen Tabellentyp definieren. Dann können Sie a ausgeben SELECT...BULK COLLECT um Ihren Tisch zu füllen.

declare
  type my_record_type is record (testId number, testvalue number);
  type my_table_type is table of my_record_type index by binary_integer;
  my_table my_table_type;
begin
  select x, y bulk collect into my_table from table_foo;
end;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top