создавать большие объекты в Oracle через sqlplus - PullRequest
2 голосов
/ 05 июля 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 06 июля 2011

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

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

0 голосов
/ 06 июля 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...