Как сказал Клас, вы должны иметь возможность использовать VARCHAR2 (32767) для объявления вашей переменной, но если вы обнаружите, что этого недостаточно, вы можете просто использовать более одной переменной VARCHAR2 для хранения различных частей представления.оператора, а затем введите их в оператор EXECUTE IMMEDIATE.
Ответ AskTom здесь демонстрирует:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6161200355268
Говорит:
Выуказали, что максимальная длина строки для немедленного выполнения составляет 32 КБ.
Мы используем команду немедленного выполнения для создания сгенерированных пакетов, и в настоящее время мы передаем ее> 35000 символов
путем немедленного выполнения v_myvc1 ||my_vc2
vc1 и vc2 - 32 k varchar2 vars.общая длина которого
35000
Все по 8.1.7
Мой вопрос: какова максимальная длина строки немедленного выполнения, причина Iволновался, что это было 32 КБ, и мы уже по этому, и я не уверен, когда я собираюсь ударить стену.
Том Кайт отвечает:
Продолжение 5 марта 2003 г. - 18:00 Центральный часовой пояс:
интересно - никогда бы не подумал сделать это такway.
Это похоже на работу - ударит ли он о стену?не уверен, я бы никогда не перешел 32 КБ.
похоже, что он может быть довольно большим:
ops$tkyte@ORA817DEV> declare
2 l_str1 long := 'select /* ' || rpad( '*', 20000, '*' ) || ' */ * ';
3 l_str2 long := 'from /* ' || rpad( '*', 15000, '*' ) || ' */ dual';
4 l_str3 long := '/* ' || rpad( '*', 32000, '*' ) || ' */ ';
5 l_result dual.dummy%type;
6 begin
7 execute immediate l_str1||l_str2||l_str3||l_str3||l_str3||' d' into l_result;
8 dbms_output.put_line( l_result );
9 end;
10 /
PL / SQL-процедура успешно завершена.
Хотя это было на экземпляре базы данных Oracle 8i, я был бы очень удивлен, если бы возможность последовательного изменения переменных VARCHAR2 была упущена в более поздних версиях.К сожалению, я не могу проверить это, так как у меня нет 10g экземпляра, доступного для раздачи.