Конвертировать жесткое кодирование - использовать динамический SQL - PullRequest
0 голосов
/ 27 сентября 2018

Вот где я нахожусь с моей процедурой, использующей БОЛЬШУЮ способность загрузки 11G.Как я могу преобразовать это для использования динамического SQL, чтобы мне не пришлось жестко кодировать исходную и целевую таблицы.

CREATE OR REPLACE PROCEDURE Ld_Partition_Tbl 
(p_array_size IN PLS_INTEGER DEFAULT 10000) IS

TYPE ARRAY IS TABLE OF *SourceTableName*%ROWTYPE;
l_data ARRAY;

CURSOR c IS SELECT * FROM *SourceTableName*;

BEGIN

  OPEN c;
    LOOP
      FETCH c BULK COLLECT INTO l_data LIMIT p_array_size;

      FORALL i IN 1..l_data.COUNT
      INSERT INTO *TargetTableName* VALUES l_data(i);

      EXIT WHEN c%NOTFOUND;
    END LOOP;
  CLOSE c;

END Ld_Partition_Tbl;

Мне нужно заменить SourceTableName и TargetTableName параметрами, но нужно использоватьдинамический SQL.

1 Ответ

0 голосов
/ 27 сентября 2018

Из того, что вы предоставили, вы можете просто запустить это.Вам не нужно хранить данные в промежуточной переменной l_data.

EXECUTE IMMEDIATE 'INSERT INTO ' ||*TargetTableName*||' SELECT * FROM ' ||*SourceTableName*;
...