powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать if not exists в запросе create table ?
25 сообщений из 76, страница 1 из 4
Как сделать if not exists в запросе create table ?
    #37048641
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MySQL есть можно написать так:
Код: plaintext
create table if not exists mytable (id int)
Можно сделать тоже самое в Oracle?

Всё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql.
Но я не верю, что Oracle не имеет возможности, которая есть в MySQL. Причём эта возможность весьма очевидная и полезная..
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048644
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoПричём эта возможность весьма очевидная и полезная..а можно пример необходимости?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048649
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoМожно сделать тоже самое в Oracle?

Просто пиши CREATE TABLE. Если таблица уже есть, ничего не произойдёт.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048651
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovПросто пиши CREATE TABLE. Если таблица уже есть, ничего не произойдёт.


Это не сработало:
Код: plaintext
ORA- 00955 : имя уже задействовано для существующего объекта
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048653
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилова можно пример необходимости?
Я хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при создании схемы, а только по требованию.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048654
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoЭто не сработало:

ORA-00955: имя уже задействовано для существующего объекта
Ну и? Просто игнорируй эту ошибку.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048655
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВсё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql.
можно и через pl/sql, но тогда обарачивать надо в еxcute immediate с обработкой ошибок. Смысла нет, пиши сразу, как указывали. Да и много DDL в системе- признак "непродуманности" построения данных.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048656
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoЯ хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при
создании схемы, а только по требованию.

А в чём фишка? Пустая таблица не занимает места, не добавляет накладных расходов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048662
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovboraldoЭто не сработало:

ORA-00955: имя уже задействовано для существующего объекта
Ну и? Просто игнорируй эту ошибку.

Что значит игнорируй? У меня исключение валится, я же не в визуальном клиенте это делаю, а через jdbc.
Я конечно могу поймать его и сравнить код ошибки, но это костыль.
Нормальное ПО не должно валить ошибку, если заранее известно, что её на самом деле нет.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048666
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoЯ конечно могу поймать его и сравнить код ошибки, но это костыль.бизнес-логика на эксепшенах - не круто, проверяйте сначала наличие таблицы (даже sqlplus позволяет).
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048667
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
semenarДа и много DDL в системе- признак "непродуманности" построения данных.
Я бы сказал, что это признак того, что это не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими метаданными.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048669
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldo а сложная система, которая умеет управлять своими метаданными.
с этого места подробнее пожалуйста.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048672
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semenarэтого места подробнее пожалуйста.видимо крутая система, предвижу следующий вопрос: Как создать внешний ключ на sys.obj$
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048677
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов, после приведеннной ссылки вопрос снимается. Вам спасибо.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048679
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoэто не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими
метаданными.

И при этом работает только если все пользователи используют одну учётную запись, причём
эта запись имеет права на создание таблиц. Может, для MySQL это и нормально, а в других
местах называется бардаком.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048683
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
semenarboraldo а сложная система, которая умеет управлять своими метаданными.
с этого места подробнее пожалуйста.
Подробнее не могу, ибо коммерческая тайна.
Всё, что могу сказать, - нужно общаться к таблице, которой заранее нет и нужно при первом обращении её создать.

Dimitry SibiryakovboraldoЯ хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при
создании схемы, а только по требованию.

А в чём фишка? Пустая таблица не занимает места, не добавляет накладных расходов.

Число таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме.
По этой причине перечислить их в скрипте создания схемы невозможно.
Число схем также неограничено, поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048687
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoЧисло таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент,
причём в рантайме.

Проектировщику базы - персональный эцих с гвоздями.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048688
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovboraldoэто не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими
метаданными.

И при этом работает только если все пользователи используют одну учётную запись, причём
эта запись имеет права на создание таблиц. Может, для MySQL это и нормально, а в других
местах называется бардаком.


Пользователи вообще не работают с базой данных, они работают через веб-интерфейс, который сам обращается к БД через jdbc.
Так что никакого бардака, всё в порядке.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048690
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧисло таких таблиц ничем неограничено , новые таблицы могут появиться в любой момент, причём в рантайме.
По этой причине перечислить их в скрипте создания схемы невозможно.
Число схем также неограничено , поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно .
DBA при таком положении вещей- несчастный человек, разруливая права,аудит,гранты и прочее...
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048691
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
semenarАндрей Панфилов, после приведеннной ссылки вопрос снимается. Вам спасибо.
Если из этой ссылки вы подумали, что эта таблица - schemas , то вы ошибаетесь. Тот вопрос вообще о другом, к этой теме никак не относится.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048716
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
semenarавторЧисло таких таблиц ничем неограничено , новые таблицы могут появиться в любой момент, причём в рантайме.
По этой причине перечислить их в скрипте создания схемы невозможно.
Число схем также неограничено , поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно .
DBA при таком положении вещей- несчастный человек, разруливая права,аудит,гранты и прочее...
Ничего такого не нужно по причине описанной выше: пользователь БД может быть всего один, пользователи системы к базе доступа вообще не имеют.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048720
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoЧисло таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме.Стоит также задуматься над созданием новой базы в рантайме и установке сервера. Тут могут помочь виртуальные машины.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048748
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
boraldoВ MySQL есть можно написать так:
Код: plaintext
create table if not exists mytable (id int)
Можно сделать тоже самое в Oracle?

Всё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql.
Но я не верю, что Oracle не имеет возможности, которая есть в MySQL. Причём эта возможность весьма очевидная и полезная..
Какая-то странная логика... В мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия...
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048790
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderВ мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия...
1) В MySQL есть работа с ошибками
2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048801
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
boraldoxtenderВ мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия...
1) В MySQL есть работа с ошибками
2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.
Как бы фантастично это не прозвучало, но даже без этой "опции" таблицу создаст только если ее нет.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 1 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать if not exists в запросе create table ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]