создавать большие объекты в оракуле через sqlplus

У меня есть представление, DDL-определение которого состоит из многих тысяч строк. Частью нашего процесса CI является удаление и воссоздание представлений из DDL с помощью SQLPlus, вызываемого из сценария командной строки.

Это работает для сотен представлений в базе данных, но очень большое представление никогда не создается в целевой схеме. Я всегда вручную вставляю сценарий создания представления в Toad и запускаю его вручную после завершения автоматизированного процесса. Это бремя.

Нет осмысленного сообщения об ошибке от SQLPlus, когда запускается большая часть сценария DDL, но я подозреваю, что он терпит неудачу из-за своего размера.

Есть ли команда «set», которую я могу включить в начало своего DDL, чтобы сообщить SQLPlus, что можно создавать большие представления, или я навсегда обречен включать глупый ручной шаг в автоматический процесс CI?


person grenade    schedule 05.07.2011    source источник


Ответы (2)


Во-первых, используйте самую последнюю версию SQLPlus. Прошло много времени с тех пор, как у меня был кусок кода, который был слишком большим для выполнения через SQLPlus. Вы можете использовать InstantClient

Я бы также посмотрел на рефакторинг представления. Посмотрите на предложение WITH. является относительно новым, и, если представление развивалось в течение длительного периода, есть большая вероятность, что его можно изменить, чтобы использовать это

person Gary Myers    schedule 05.07.2011

Есть ли пустая строка в представлении SQL или какая-либо строка содержит более 2499 символов? Любой из них может привести к неожиданному поведению SQL*Plus, но не к сбою.

Если есть пустая строка, Oracle проигнорирует все до нее и попытается запустить все после нее. (Это относится только к SQL, а не к PL/SQL.) Например, если у вас есть пустая строка сразу после строки create view, запрос будет выполнен:

SQL> create or replace view newline_in_the_middle as
  2
SQL> select * from dual;

D
-
X

Строка с >2499 символов будет проигнорирована, но Oracle все равно попытается обработать оператор без нее. Это может вызвать проблемы, но все же может привести к правильному утверждению:

SQL> create or replace view long_line as
  2  select '...[enter 2500 characters]...' asdf from dual union all
SP2-0027: Input is too long (> 2499 characters) - line ignored
  2  select '1' asdf from dual;

View created.

Возможно, вам придется очень внимательно проверить выходные данные скрипта, чтобы найти эти проблемы.

person Jon Heller    schedule 06.07.2011