Соединение таблицы Oracle с параметром массива - PullRequest
2 голосов
/ 17 марта 2011

Мне нужно ускорить процедуру, которая вставляет записи в таблицу сопоставления.

Используемая мной процедура имеет подпись:

InsertDocsToFolder as
procedure this(p_folderid in number, p_docs in out nocopy DocList)

DocList определен как

type DocList is table of int index by integer;

Ядро процедуры вставляет записи следующим образом, t_docs - этоОсновная таблица документа и t_mapping - это отображение таблицы p_folderid в p_docs:

forall i in 1..p_docs.count save exceptions
  insert into t_mapping select p_folderid, p_docs(i) from t_docs D where D.docid = p_docs(i);
commit;

Я думаю, что я должен быть в состоянии заменить цикл forall одним оператором SQL.Кто-нибудь может предложить более быструю технику?Поскольку p_docs является табличным типом, могу ли я присоединить его непосредственно к t_docs?

1 Ответ

3 голосов
/ 17 марта 2011

Вы можете использовать только типы коллекций, созданные на сервере («создать тип ...») в SQL.Так что, если вы сделали это:

create type DocList is table of int;

, вы можете выбрать из этого, например:

insert into t_mapping 
select p_folderid, column_value
from table (cast (t_docs as DocList));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...