Вопрос

Скажем, вы генерируете DDL, чтобы создать все ваши таблицы DB и т. Д. через Hibernate SchemaExport и т. Д. То, что вы получаете, это скрипт, который начинается с выписки сброса в начале. Не проблема, как я хочу это. Но запуск этого скрипта производит черепную ошибку ORA-00942, работающую на Oracle DB.

Поскольку они на самом деле не на самом деле ошибки, если таблицы еще не существовали, я бы хотел, чтобы мой сценарий Create будет иметь ошибку, когда он выполняет, поэтому его легко определить.

Каковы мои варианты? Я хочу, чтобы заявления сброса сгенерированы с момента, поскольку таблицы могут еще не существовать, но я не хочу, чтобы миллион ORA-S возвращался на меня, что я должен проверить (чтобы определить, если они фактические ошибки) только потому, что это не может T Отбросьте стол, которая является совершенно новым.

Это было полезно?

Решение

Если вы получите скрипт выступлений сброса, и Hibernate не сделает это для вас, затем оберните операторы таблицы Drop в случае проверки, если таблица существует, прежде чем отбросить ее:

IF EXISTS(SELECT NULL 
            FROM TABLE_XYZ) THEN
  DROP TABLE TABLE_XYZ;
END IF;

Другие советы

«Скажем, что вы генерируете DDL, чтобы создать все ваши таблицы DB и т. Д. Через Hibernate SchemaExport и т. Д. То, что вы получаете, это сценарий, который начинается с выписки сброса в начале. Не проблема, как я хочу это. Но запуск этого сценария производит крапруду ORA -00942 ошибки, работающие на Oracle DB. "

В идеале мы должны правильно поддерживать нашу схему, используя исходный контроль и лучшие практики управления конфигурацией. В этом сценарии мы заранее знаем, будь то схема, которую мы запустим наши сценарии против этих таблиц. Мы не получаем ошибки, потому что мы не пытаемся бросить таблицы, которые не существуют.

Однако это не всегда возможно сделать это. Один альтернативный подход - иметь два сценария. Первый скрипт просто имеет операторы капле в таблицу, предусматриваемые дружелюбным

PROMPT  It is safe to ignore any ORA-00942 errors in the following statements

Второй скрипт имеет все заявления о создании таблиц и приводит к

PROMPT  All the statements in this script should succeed.  So investigate any errors

Другой вариант - использовать словарь данных:

begin
    for r in ( select table_name from user_tables )
    loop
        execute immediate 'drop table '||r.table_name
                    ||' cascade constraints';
    end loop;
end;

Будьте осторожны с этим. Это ядерный вариант и упадет на каждую таблицу в вашей схеме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top