Question

Disons que j'ai une fonction dans laquelle je dois effectuer plusieurs actions, qui dépendent toutes des résultats d'une requête. Tout ce que j'ai pu trouver indique que je dois définir un tableau temporaire en dehors de la procédure, ce que je ne veux pas faire.

J'aimerais faire quelque chose comme ce qui suit:

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;

Cette syntaxe ne fonctionne pas. Oracle ne permet pas de «créer» dans une fonction.

Je ne suis pas vraiment un programmeur de base de données - j'ai l'habitude de travailler en C # et Java. Dans ce cas, je stockerais mes valeurs dans un tableau local (ou autre) qui sort de la portée lorsque la méthode s'est terminée. N'y a-t-il légitimement aucun moyen de faire quelque chose comme ça dans Oracle SQL?

Était-ce utile?

La solution

Vous pouvez définir un type d'enregistrement PL / SQL et le type de table associé. Ensuite, vous pouvez émettre un SELECT...BULK COLLECT pour remplir votre table.

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top