Вопрос

Допустим, у меня есть функция, в рамках которой мне нужно выполнить несколько действий, которые зависят от результатов одного запроса. Все, что мне удалось найти, указывает на то, что мне нужно определить временную таблицу за пределами процедуры, которую я не хочу делать.

Я хотел бы сделать что -то вроде следующего:

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;

Этот синтаксис не работает. Oracle не позволяет «создавать» внутри функции.

Я на самом деле не программист базы данных - я привык работать в C# и Java. В этом случае я бы хранил свои значения в локальном массиве (или что -то в этом роде), которое выходит из сферы действия, когда метод закончен. Есть ли в Oracle SQL на законных основаниях сделать что -то подобное?

Это было полезно?

Решение

Вы можете определить тип записи PL/SQL и соответствующий тип таблицы. Тогда вы можете выпустить SELECT...BULK COLLECT Чтобы заполнить ваш стол.

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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top