powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать if not exists в запросе create table ?
25 сообщений из 76, страница 2 из 4
Как сделать if not exists в запросе create table ?
    #37048802
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1) В MySQL есть работа с ошибками
В оракле тоже - Exception.
автор2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists, БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.

для такого рода реализации- хранимая процедура + exception. Тебе в соседней ветке уже и премер дали.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048805
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldo2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.А в чем разница. Разве что, в желаемом вами варианте, если сначала проверять существование, то между проверкой и созданием может кто-то вклиниться и создать объект в этом же неймспейсе. Кстати, MySQL create table if not exists проверяет существование именно таблицы с указанным именем?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048816
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderboraldo2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.
Как бы фантастично это не прозвучало, но даже без этой "опции" таблицу создаст только если ее нет.
Да, но ещё выкинет исключение, чего не хотелось бы.
Речь ведь о возможности. Такая возможность никому бы не помешала. Причём я бы понял, если бы какие-то разумные условия мешали бы существованию такой опции. А так получается создатели Oracle просто поленились.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048822
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoсоздатели Oracle просто поленились.Создатели оракла много в чем поленились. Потому так ценятся разработчики под этот конструктор генитальных идей.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048824
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
semenarавтор1) В MySQL есть работа с ошибками
В оракле тоже - Exception.
Я не утверждал, что в Oracle её нет.

semenarавтор2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists, БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.

для такого рода реализации- хранимая процедура + exception. Тебе в соседней ветке уже и премер дали.
На plsql я и сам мог бы написать. Я уже несколько раз подчеркнул это. Неприятно то, что приходится самому писать то, что могло бы уже само быть в языке. Вы скажете: "а может ты ещё чего захочешь и тогда создателям Oracle придётся уважить". Однако на это всё тот же аргумент: в данном случае я хочу не чего-то сверхъестественного и необычного. Раз это есть в MySQL, значит могло бы быть и в Oracle.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048827
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoРаз это есть в MySQL, значит могло бы быть и в Oracle.Ну чем-то должны себя тешить приверженцы ущербных СУБД.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048843
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
boraldo2) Речь не о попытке создать таблицу и проглотить исключение.
boraldoДа, но ещё выкинет исключение, чего не хотелось бы.
Сами себе противоречите...
Тем не менее, объясните сокровенный смысл подавления исключения в этом случае? Может еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048850
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtenderboraldo2) Речь не о попытке создать таблицу и проглотить исключение.
boraldoДа, но ещё выкинет исключение, чего не хотелось бы.
Сами себе противоречите...

В чём противоречие? В обоих процитированных предложениях выкидывание исключения понимается как зло.

xtenderТем не менее, объясните сокровенный смысл подавления исключения в этом случае? Может еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует?
Смысл я уже объяснял выше.
Ваше высказывание про if not equals я тоже предусмотрел в этом комменте 10041082
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048852
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-boraldoРаз это есть в MySQL, значит могло бы быть и в Oracle.Ну чем-то должны себя тешить приверженцы ущербных СУБД.
Я понимаю, что в целом MySQL ущербен по сравнению с Oracle. Потому и спрашиваю, как всё это сделать на Oracle.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048860
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoПотому и спрашиваю, как всё это сделать на Oracle.не спрашиваете. "как это сделать" вы уже для себя решили. иначе хватило бы пары ответов.

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

И так и не ответили, проверяется ли весь неймспейс или только таблицы.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048878
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-boraldoПотому и спрашиваю, как всё это сделать на Oracle.не спрашиваете. "как это сделать" вы уже для себя решили. иначе хватило бы пары ответов.
Я имел в виду, что изначально я об этом спрашивал по этой причине.


-2-И так и не ответили, проверяется ли весь неймспейс или только таблицы.
В MySQL вроде нет понятия namespace, по крайней мере я не знаю.
create if not exists проверяет, есть ли в целевой схеме таблица с таким именем.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37048945
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
схема - это нечто чётко очерченное и структурированное. Часто может менять логика приложения (pl/sql или внешний клиент). Структура в работающих приложениях меняется крайне редко. И в большинстве случаев - это расширение схемы.

динамическое создание таблиц приложением по факту действий юзеров - это просто жесть. Проектирование в особо извращённой форме.

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

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

11gR2 - отложенное создание сегментов
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049092
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tolkaдинамическое создание таблиц приложением по факту действий юзеров - это просто жесть. Проектирование в особо извращённой форме.
Таблицы естественно смогут создавать не любые юзеры, а только специальные. Можно понимать их как админов. Их конечное число, и они не полные укурки.

TolkaПочитайте про темп таблицы. Может подойдёт.
Выдержка из мануала:
A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed.
Каким образом это поможет не создавать таблицу, если она уже есть?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049104
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoTolkaПочитайте про темп таблицы. Может подойдёт.
Выдержка из мануала:
A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed.
Каким образом это поможет не создавать таблицу, если она уже есть?Из мануала по какому продукту?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049114
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RA\/ENboraldoпропущено...

Выдержка из мануала:
A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed.
Каким образом это поможет не создавать таблицу, если она уже есть?Из мануала по какому продукту?
Это кокнретная выдержка из MySQL (запутался). Почитал по Oracle - по сути тоже самое. Данные в таблице доступны только внутри одной транзакциями или сессии. Вещь в принципе полезная, но каким образом это решает проблему, описанную в топике ?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049190
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто формально, да. В Оракл нет опции if not exist.

Для реализации желаемого поведения, вы можете делать, например, так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare
   ex_already_exists exception;
   pragma exception_init(ex_already_exists, - 00955 );
begin
   execute immediate 'create table t (id number)';
exception
   when ex_already_exists then
      dbms_output.put_line('Table already exists. Do nothing');
end;
/



toleg@xe: drop table t;

Table dropped.

toleg@xe: declare
   2      ex_already_exists exception;
   3      pragma exception_init(ex_already_exists, - 00955 );
   4   begin
   5      execute immediate 'create table t (id number)';
   6   exception
   7      when ex_already_exists then
   8         dbms_output.put_line('Table already exists. Do nothing');
   9   end;
  10   /

PL/SQL procedure successfully completed.

toleg@xe: /
Table already exists. Do nothing

PL/SQL procedure successfully completed.


Но всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.

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


Ваши юзеры создают однотипные таблицы? Если да, то можно создать единственный набор таких таблиц и данные по всем юзерам туда успешно складывать.

Если разнотипные, то как вопрос xtendera?

xtenderМожет еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует?

Опишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049499
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.
Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049509
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TolkaОпишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный.
Админ хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах.
Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах.
Число схем неограничено, в любой момент может появиться новая, поэтому тупо после его действия создать эту таблицу во всех схемах невозможно.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049511
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.
Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
в этом месте, если таблица существует, он должен получить ошибку "table exists", нахера весь этот огород?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049515
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoTolkaОпишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный.
Админ хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах.
Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах.
Число схем неограничено, в любой момент может появиться новая, поэтому тупо после его действия создать эту таблицу во всех схемах невозможно.
это какое-то странная муть в головах, насчет таблиц в каждой схеме.
какую задачу админ будет пытаться решить, создавая время от времени некие таблицы, которые должны появиться во всех схемах?
для этого невозможно создать одну таблицу со столбцом OWNER?
для этого не подойдет authid current_user?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049518
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
брадобрейboraldoДа почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
в этом месте, если таблица существует, он должен получить ошибку "table exists", нахера весь этот огород?

Этот мой коммент никак не относится к теме поста. Он отвечает на это:
TolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.

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

Данные в этой таблице одни для всех? Или каждый пользователь вправе их править на своё усмотрение? Если одни для всех - то

Код: plaintext
1.
2.
   create public synonym new_admin_table_syn for new_admin_table;
   grant select on new_admin_table_syn for public;

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

Если у вас большая система, и вы для каждого юзера создаёте отдельную схему...которую при чём надо ещё и постоянно динамически изменять...то мои вам соболезнования...

Для рядовых юзеров весь функционал чудесно умещается в одной схеме с одной доп. колонкой owner в таблицах. Да и всё.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 2 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать if not exists в запросе create table ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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