Pregunta

Digamos que tengo una función dentro de la cual necesito realizar varias acciones, todas las cuales dependen de los resultados de una consulta. Todo lo que he podido encontrar indica que necesito definir una tabla de temperatura fuera del procedimiento, lo que no quiero hacer.

Me gustaría hacer algo como lo siguiente:

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;

Esta sintaxis no funciona. Oracle no permite 'crear' dentro de una función.

Realmente no soy un programador de base de datos: estoy acostumbrado a trabajar en C# y Java. En ese caso, almacenaría mis valores en una matriz local (o lo que sea) que salga del alcance cuando terminó el método. ¿No hay legítimamente una forma de hacer algo como esto en Oracle SQL?

¿Fue útil?

Solución

Puede definir un tipo de registro PL/SQL y el tipo de tabla asociado. Entonces puedes emitir un SELECT...BULK COLLECT para llenar su mesa.

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top