Domanda

Diciamo che ho una funzione all'interno della quale devo eseguire diverse azioni, tutte dipendono dai risultati di una domanda. Tutto ciò che sono stato in grado di trovare indica che devo definire una tabella di temperatura al di fuori della procedura, cosa che non voglio fare.

Mi piacerebbe fare qualcosa come il seguente:

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;

Questa sintassi non funziona. Oracle non consente "creare" all'interno di una funzione.

Non sono davvero un programmatore di database: sono abituato a lavorare in C# e Java. In tal caso avrei memorizzato i miei valori in un array locale (o altro) che non va fuori dall'ambito al termine del metodo. Non c'è legittimamente alcun modo per fare qualcosa del genere in Oracle SQL?

È stato utile?

Soluzione

È possibile definire un tipo di record PL/SQL e un tipo di tabella associato. Quindi puoi emettere un file SELECT...BULK COLLECT per riempire il tuo tavolo.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top