|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
автор1) В MySQL есть работа с ошибками В оракле тоже - Exception. автор2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists, БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений. для такого рода реализации- хранимая процедура + exception. Тебе в соседней ветке уже и премер дали. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:25 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldo2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений.А в чем разница. Разве что, в желаемом вами варианте, если сначала проверять существование, то между проверкой и созданием может кто-то вклиниться и создать объект в этом же неймспейсе. Кстати, MySQL create table if not exists проверяет существование именно таблицы с указанным именем? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:27 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
xtenderboraldo2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений. Как бы фантастично это не прозвучало, но даже без этой "опции" таблицу создаст только если ее нет. Да, но ещё выкинет исключение, чего не хотелось бы. Речь ведь о возможности. Такая возможность никому бы не помешала. Причём я бы понял, если бы какие-то разумные условия мешали бы существованию такой опции. А так получается создатели Oracle просто поленились. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:34 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoсоздатели Oracle просто поленились.Создатели оракла много в чем поленились. Потому так ценятся разработчики под этот конструктор генитальных идей. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:39 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarавтор1) В MySQL есть работа с ошибками В оракле тоже - Exception. Я не утверждал, что в Oracle её нет. semenarавтор2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists, БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений. для такого рода реализации- хранимая процедура + exception. Тебе в соседней ветке уже и премер дали. На plsql я и сам мог бы написать. Я уже несколько раз подчеркнул это. Неприятно то, что приходится самому писать то, что могло бы уже само быть в языке. Вы скажете: "а может ты ещё чего захочешь и тогда создателям Oracle придётся уважить". Однако на это всё тот же аргумент: в данном случае я хочу не чего-то сверхъестественного и необычного. Раз это есть в MySQL, значит могло бы быть и в Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:39 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoРаз это есть в MySQL, значит могло бы быть и в Oracle.Ну чем-то должны себя тешить приверженцы ущербных СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:41 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldo2) Речь не о попытке создать таблицу и проглотить исключение. boraldoДа, но ещё выкинет исключение, чего не хотелось бы. Сами себе противоречите... Тем не менее, объясните сокровенный смысл подавления исключения в этом случае? Может еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:54 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
xtenderboraldo2) Речь не о попытке создать таблицу и проглотить исключение. boraldoДа, но ещё выкинет исключение, чего не хотелось бы. Сами себе противоречите... В чём противоречие? В обоих процитированных предложениях выкидывание исключения понимается как зло. xtenderТем не менее, объясните сокровенный смысл подавления исключения в этом случае? Может еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует? Смысл я уже объяснял выше. Ваше высказывание про if not equals я тоже предусмотрел в этом комменте 10041082 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 23:05 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
-2-boraldoРаз это есть в MySQL, значит могло бы быть и в Oracle.Ну чем-то должны себя тешить приверженцы ущербных СУБД. Я понимаю, что в целом MySQL ущербен по сравнению с Oracle. Потому и спрашиваю, как всё это сделать на Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 23:09 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoПотому и спрашиваю, как всё это сделать на Oracle.не спрашиваете. "как это сделать" вы уже для себя решили. иначе хватило бы пары ответов. И так и не ответили, проверяется ли весь неймспейс или только таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 23:17 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
-2-boraldoПотому и спрашиваю, как всё это сделать на Oracle.не спрашиваете. "как это сделать" вы уже для себя решили. иначе хватило бы пары ответов. И так и не ответили, проверяется ли весь неймспейс или только таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 23:54 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
-2-boraldoПотому и спрашиваю, как всё это сделать на Oracle.не спрашиваете. "как это сделать" вы уже для себя решили. иначе хватило бы пары ответов. Я имел в виду, что изначально я об этом спрашивал по этой причине. -2-И так и не ответили, проверяется ли весь неймспейс или только таблицы. В MySQL вроде нет понятия namespace, по крайней мере я не знаю. create if not exists проверяет, есть ли в целевой схеме таблица с таким именем. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 23:58 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
схема - это нечто чётко очерченное и структурированное. Часто может менять логика приложения (pl/sql или внешний клиент). Структура в работающих приложениях меняется крайне редко. И в большинстве случаев - это расширение схемы. динамическое создание таблиц приложением по факту действий юзеров - это просто жесть. Проектирование в особо извращённой форме. Почитайте про темп таблицы. Может подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 05:22 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
-2-boraldoЧисло таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме.Стоит также задуматься над созданием новой базы в рантайме и установке сервера. Тут могут помочь виртуальные машины. в мемориз )) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 05:23 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoАндрей Панфилова можно пример необходимости? Я хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при создании схемы, а только по требованию. 11gR2 - отложенное создание сегментов ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 10:49 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Tolkaдинамическое создание таблиц приложением по факту действий юзеров - это просто жесть. Проектирование в особо извращённой форме. Таблицы естественно смогут создавать не любые юзеры, а только специальные. Можно понимать их как админов. Их конечное число, и они не полные укурки. TolkaПочитайте про темп таблицы. Может подойдёт. Выдержка из мануала: A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. Каким образом это поможет не создавать таблицу, если она уже есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 14:34 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaПочитайте про темп таблицы. Может подойдёт. Выдержка из мануала: A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. Каким образом это поможет не создавать таблицу, если она уже есть?Из мануала по какому продукту? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 14:50 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
RA\/ENboraldoпропущено... Выдержка из мануала: A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. Каким образом это поможет не создавать таблицу, если она уже есть?Из мануала по какому продукту? Это кокнретная выдержка из MySQL (запутался). Почитал по Oracle - по сути тоже самое. Данные в таблице доступны только внутри одной транзакциями или сессии. Вещь в принципе полезная, но каким образом это решает проблему, описанную в топике ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 15:04 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Чисто формально, да. В Оракл нет опции 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.
Но всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Открою секрет, если вдруг не знаете. В оракл также нет автоинкрементного поля. Поэтому, для заполнения в таблицах, созданных вашими юзерами-админами-не укурками, уникального ключа, если таковой будет, надо будет создавать ещё сиквенс и дёргать его при вставке. Ваши юзеры создают однотипные таблицы? Если да, то можно создать единственный набор таких таблиц и данные по всем юзерам туда успешно складывать. Если разнотипные, то как вопрос xtendera? xtenderМожет еще и добавить опцию if not equals? А то вдруг существующая таблица не сходится с той, что хотите создать? И в delete добавить опцию if exists, а то вдруг попытаемся удалить из таблицы, которая не существует? Опишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 16:29 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
TolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 21:48 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
TolkaОпишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный. Админ хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах. Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах. Число схем неограничено, в любой момент может появиться новая, поэтому тупо после его действия создать эту таблицу во всех схемах невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 21:55 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. в этом месте, если таблица существует, он должен получить ошибку "table exists", нахера весь этот огород? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 21:57 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaОпишите процесс, который вы автоматизируете, и который решается вами только таким способом. Может, подскажут другой. Более адекватный. Админ хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах. Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах. Число схем неограничено, в любой момент может появиться новая, поэтому тупо после его действия создать эту таблицу во всех схемах невозможно. это какое-то странная муть в головах, насчет таблиц в каждой схеме. какую задачу админ будет пытаться решить, создавая время от времени некие таблицы, которые должны появиться во всех схемах? для этого невозможно создать одну таблицу со столбцом OWNER? для этого не подойдет authid current_user? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 21:59 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
брадобрейboraldoДа почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. в этом месте, если таблица существует, он должен получить ошибку "table exists", нахера весь этот огород? Этот мой коммент никак не относится к теме поста. Он отвечает на это: TolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Зачем мне нужна опция if not exists я объясняю в предыдущем посте. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:04 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoАдмин хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах. Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах. Число схем неограничено, в любой момент может появиться новая, поэтому тупо после его действия создать эту таблицу во всех схемах невозможно. Данные в этой таблице одни для всех? Или каждый пользователь вправе их править на своё усмотрение? Если одни для всех - то Код: plaintext 1. 2.
Если каждый юзер имеет право редактировать данные, то для этого создаётся одна таблица с доп. параметром owner - и она хранит данные по всем юзерам. Если у вас большая система, и вы для каждого юзера создаёте отдельную схему...которую при чём надо ещё и постоянно динамически изменять...то мои вам соболезнования... Для рядовых юзеров весь функционал чудесно умещается в одной схеме с одной доп. колонкой owner в таблицах. Да и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:04 |
|
|
start [/forum/topic.php?fid=52&msg=37049190&tid=1882371]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 172ms |
0 / 0 |