LINUX.ORG.RU

Свежая таблица


0

1

Мой код работает с Oracle Database 10g Release 2 (10.2.0.1.0), создаёт таблицу и затем заполняет её данными. Выглядит это примерно так:

CREATE TABLE table1 AS SELECT * FROM table2 WHERE 1=0
INSERT INTO table1 SELECT * FROM table2 WHERE {условие с параметрами}

В 99% случаев этот подход работает корректно. Но иногда вторая команда падает с ошибкой о том, что table1 не существует, хотя она только что была создана. Почему это происходит?

★★★★★

Что-то вы недоговариваете. Какую именно ошибку выдает? ORA-сколько-то-там какая? И как проверяете,что table1 реально создалась? Ну а вообще смотрите права пользователя,под которым создаете table1 и вставляете в нее,гранты на таблицу table2,смотрите квоты,смотрите синонимы если table2 в другой схеме.Да банально доступное место проверьте в таблспейсе.

Borigenz
()

Выкиньте оракл, возьмите нормальную базу данных.

slovazap ★★★★★
()
Ответ на: комментарий от stack_protector

Может запросы асинхронные.

А по-подробнее? JDBC поддерживает асинхронные вызовы и такой режим может быть включён по умолчанию?

bbk123 ★★★★★
() автор топика
Ответ на: комментарий от stack_protector

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

Borigenz
()
Ответ на: комментарий от bbk123

Вижу эту таблицу в SQL Developer-е.


Ставлю на глюк SQL Developer-а. Жуткая штука. Можно повторить баг из sqlplus-а или вызвав этот же кусок кода в процедуре?

Borigenz
()
Ответ на: комментарий от Borigenz

Ставлю на глюк SQL Developer-а.

Не думаю, что SQL Developer умеет читать мои мысли или подсматривать за работой сторонней программы.

bbk123 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.