Результат сохранения хранимой процедуры в табличной переменной - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть вопрос: у меня есть сохраненная процедура A (вернуть три выходных параметра).Я хочу вызвать процедуру A в цикле и вставить эти три параметра в временную таблицу и вернуть эту таблицу.

    DECLARE
    Type TestTable IS TABE OF NUMBER; -- for example one parameter!!!
    myTable TestTable;
BEGIN
LOOP
    A(o_param1, o_param2, o_param3);
    -- myTable insert o_param1,2,3;
    -- insert into myTable values(99); - here I have error PL/SQL: ORA-00942: table or view does not exist
END LOOP;
SELECT * FROM myTable;
END;    

Я не знаю, как это сделать - myTable insert o_param1,2,3 ;.Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Во-первых, вы не можете вставлять данные в myTable напрямую (вставлять в myTable), потому что типы таблиц Oracle, объявленные в разделе объявления скрипта, не видны в операторах sql (исключение - вставка с использованием «массового сбора» с объявленными типамив словаре Oracle).Даже если вы вставляете данные в myTable, используя myTable (idx) ... вы не можете выбрать их вне скрипта, потому что myTable существует только внутри скрипта.Я думаю, что самый простой способ - создать обычную таблицу или глобальную временную таблицу.Если вы будете использовать глобальную временную таблицу, создайте ее с помощью 'ON COMMIT PRESERVE ROWS' (если вы используете commit после вставки)

0 голосов
/ 07 февраля 2019

написать оператор вставки внутри цикла.Таким образом, для каждого цикла вы можете вставить значения в таблицу и дать коммит после цикла.

Но вы не можете иметь select * from table внутри анонимного блока.Удалить это из блока и после завершения;вы можете попробовать запустить select * из таблицы, чтобы увидеть вывод.

BEGIN
  LOOP
    A(o_param1, o_param2, o_param3);
    -- myTable insert o_param1,2,3;
     insert into myTable values (o_param1, o_param2, o_param3);
  END LOOP;
  commit;
  --SELECT * FROM myTable;-
  END;
  SELECT * FROM myTable;
> Blockquote
...