Pergunta

Digamos que tenho uma função na qual preciso executar várias ações, todas as quais dependem dos resultados de uma consulta. Tudo o que pude encontrar indica que preciso definir uma tabela temporária fora do procedimento, o que não quero fazer.

Eu gostaria de fazer algo como o seguinte:

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 sintaxe não funciona. O Oracle não permite 'criar' dentro de uma função.

Não sou realmente um programador de banco de dados - estou acostumado a trabalhar em C# e Java. Nesse caso, eu armazenaria meus valores em uma matriz local (ou qualquer outra coisa) que sai do escopo quando o método terminar. Não há legitimamente nenhuma maneira de fazer algo assim no Oracle SQL?

Foi útil?

Solução

Você pode definir um tipo de registro PL/SQL e o tipo de tabela associado. Então você pode emitir um SELECT...BULK COLLECT Para encher sua 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top