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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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


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