Advertisement
Guest User

Untitled

a guest
May 25th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.91 KB | None | 0 0
  1. DECLARE
  2.   -- объявляем коллекцию рекордов (G_DATA_TABLE - глобальный тип)
  3.   dds    G_DATA_TABLE;
  4.   C_TMPL clob :=
  5.   'declare
  6.     -- объявляем коллекцию рекордов (G_DATA_TABLE - глобальный тип)
  7.     dds_table G_DATA_TABLE;
  8.   begin
  9.     -- инициализируем коллекцию
  10.     dds_table := G_DATA_TABLE();
  11.     -- расширяем
  12.     dds_table.extend();
  13.     -- инициализируем элемент коллекции конструктором по умолчанию (все элементы := null)
  14.     -- ( G_DATA_RECORD - глобальный объектный тип )
  15.     dds_table(1) := G_DATA_RECORD();
  16.     -- здесь меняются подстановки на необходимые из внешнего блока
  17.     -- и присваиваются нужные поля
  18.     dds_table(1).#VIEW_COL# := #VAL#;
  19.     -- привоение коллекции, првязанной в execute immediate во внешнем блоке
  20.     :DDS := dds_table;
  21.   end;';
  22.   l_cmd  clob;
  23. BEGIN
  24.   -- инициализируем коллекцию
  25.   dds := G_DATA_TABLE();
  26.   -- расширяем
  27.   dds.extend();
  28.   -- инициализируем элемент коллекции конструктором по умолчанию (все элементы := null)
  29.   -- ( G_DATA_RECORD - глобальный объектный тип )
  30.   dds(1) := G_DATA_RECORD();
  31.   -- реплейсим в анонимном блоке нужное поле и соответствующее для него значение
  32.   l_cmd := REPLACE(C_TMPL, '#VIEW_COL#', 'N01');
  33.   l_cmd := REPLACE(l_cmd, '#VAL#', 111);
  34.   -- выполняем анонимный блок, привязывая созданную коллекцию
  35.   EXECUTE IMMEDIATE l_cmd using OUT dds;
  36.   DBMS_OUTPUT.put_line(dds(1).N01);
  37. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement