|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
В MySQL есть можно написать так: Код: plaintext
Всё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql. Но я не верю, что Oracle не имеет возможности, которая есть в MySQL. Причём эта возможность весьма очевидная и полезная.. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:11 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoПричём эта возможность весьма очевидная и полезная..а можно пример необходимости? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:13 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoМожно сделать тоже самое в Oracle? Просто пиши CREATE TABLE. Если таблица уже есть, ничего не произойдёт. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:16 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПросто пиши CREATE TABLE. Если таблица уже есть, ничего не произойдёт. Это не сработало: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:18 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Андрей Панфилова можно пример необходимости? Я хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при создании схемы, а только по требованию. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:19 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoЭто не сработало: ORA-00955: имя уже задействовано для существующего объекта Ну и? Просто игнорируй эту ошибку. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:19 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
авторВсё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql. можно и через pl/sql, но тогда обарачивать надо в еxcute immediate с обработкой ошибок. Смысла нет, пиши сразу, как указывали. Да и много DDL в системе- признак "непродуманности" построения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:20 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoЯ хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при создании схемы, а только по требованию. А в чём фишка? Пустая таблица не занимает места, не добавляет накладных расходов. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:23 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovboraldoЭто не сработало: ORA-00955: имя уже задействовано для существующего объекта Ну и? Просто игнорируй эту ошибку. Что значит игнорируй? У меня исключение валится, я же не в визуальном клиенте это делаю, а через jdbc. Я конечно могу поймать его и сравнить код ошибки, но это костыль. Нормальное ПО не должно валить ошибку, если заранее известно, что её на самом деле нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:24 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoЯ конечно могу поймать его и сравнить код ошибки, но это костыль.бизнес-логика на эксепшенах - не круто, проверяйте сначала наличие таблицы (даже sqlplus позволяет). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:27 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarДа и много DDL в системе- признак "непродуманности" построения данных. Я бы сказал, что это признак того, что это не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими метаданными. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:27 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldo а сложная система, которая умеет управлять своими метаданными. с этого места подробнее пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:31 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarэтого места подробнее пожалуйста.видимо крутая система, предвижу следующий вопрос: Как создать внешний ключ на sys.obj$ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:36 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, после приведеннной ссылки вопрос снимается. Вам спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:43 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoэто не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими метаданными. И при этом работает только если все пользователи используют одну учётную запись, причём эта запись имеет права на создание таблиц. Может, для MySQL это и нормально, а в других местах называется бардаком. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:45 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarboraldo а сложная система, которая умеет управлять своими метаданными. с этого места подробнее пожалуйста. Подробнее не могу, ибо коммерческая тайна. Всё, что могу сказать, - нужно общаться к таблице, которой заранее нет и нужно при первом обращении её создать. Dimitry SibiryakovboraldoЯ хочу организовать ленивую (lazy) таблицу. То есть чтобы она создавалась не сразу при создании схемы, а только по требованию. А в чём фишка? Пустая таблица не занимает места, не добавляет накладных расходов. Число таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме. По этой причине перечислить их в скрипте создания схемы невозможно. Число схем также неограничено, поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:56 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoЧисло таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме. Проектировщику базы - персональный эцих с гвоздями. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:58 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovboraldoэто не примитивный онлайн-магазин, а сложная система, которая умеет управлять своими метаданными. И при этом работает только если все пользователи используют одну учётную запись, причём эта запись имеет права на создание таблиц. Может, для MySQL это и нормально, а в других местах называется бардаком. Пользователи вообще не работают с базой данных, они работают через веб-интерфейс, который сам обращается к БД через jdbc. Так что никакого бардака, всё в порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 19:58 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
авторЧисло таких таблиц ничем неограничено , новые таблицы могут появиться в любой момент, причём в рантайме. По этой причине перечислить их в скрипте создания схемы невозможно. Число схем также неограничено , поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно . DBA при таком положении вещей- несчастный человек, разруливая права,аудит,гранты и прочее... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 20:00 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarАндрей Панфилов, после приведеннной ссылки вопрос снимается. Вам спасибо. Если из этой ссылки вы подумали, что эта таблица - schemas , то вы ошибаетесь. Тот вопрос вообще о другом, к этой теме никак не относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 20:02 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
semenarавторЧисло таких таблиц ничем неограничено , новые таблицы могут появиться в любой момент, причём в рантайме. По этой причине перечислить их в скрипте создания схемы невозможно. Число схем также неограничено , поэтому создать эту таблицу во всех схемах при появлении таблицы также невозможно . DBA при таком положении вещей- несчастный человек, разруливая права,аудит,гранты и прочее... Ничего такого не нужно по причине описанной выше: пользователь БД может быть всего один, пользователи системы к базе доступа вообще не имеют. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 20:37 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoЧисло таких таблиц ничем неограничено, новые таблицы могут появиться в любой момент, причём в рантайме.Стоит также задуматься над созданием новой базы в рантайме и установке сервера. Тут могут помочь виртуальные машины. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 20:53 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoВ MySQL есть можно написать так: Код: plaintext
Всё, что смог нагуглить, это необходимость вручную писать такую функцию через pl/sql. Но я не верю, что Oracle не имеет возможности, которая есть в MySQL. Причём эта возможность весьма очевидная и полезная.. Какая-то странная логика... В мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 21:35 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
xtenderВ мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия... 1) В MySQL есть работа с ошибками 2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:15 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoxtenderВ мускуле, наверное, не предусмотрена работа с исключениями, поэтому и добавили такое в синтаксис. Иначе странно добавлять условие, единственной задачей которого является проглатывание ошибки. И даже в этом случае странно добавлять такие условия... 1) В MySQL есть работа с ошибками 2) Речь не о попытке создать таблицу и проглотить исключение. В случае, если указана опция if not exists , БД должна проверить, есть ли такая таблица и только если нет, создать. Никаких проглатываний исключений. Как бы фантастично это не прозвучало, но даже без этой "опции" таблицу создаст только если ее нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2011, 22:25 |
|
Как сделать 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 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:26 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
TolkaДанные в этой таблице одни для всех? Данные в таблице свои для каждой схемы. TolkaЕсли каждый юзер имеет право редактировать данные, то для этого создаётся одна таблица с доп. параметром owner - и она хранит данные по всем юзерам. Между таблицами могут быть связи и тогда всилу сказанного выше эту связь тяжело будет организовать. Пример. Запись в таблице А должна ссылаться на запись таблицы B. И тогда если a ссылается на b, то должно выполняться равенство a.schema=b.schema. Такое можно организовать? TolkaЕсли у вас большая система, и вы для каждого юзера создаёте отдельную схему...которую при чём надо ещё и постоянно динамически изменять...то мои вам соболезнования... Схема естественно не каждого юзера, а для каждой условно говоря "тематики". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:27 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
RA\/ENboraldoпропущено... Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком... Перечитайте этот коммент: 10043343 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:30 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoПеречитайте этот коммент: 10043343 ну вот я прочитал и нихрена не понял. где именно ты объясняешь, зачем тебе if not exists ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:32 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
брадобрейboraldoПеречитайте этот коммент: 10043343 ну вот я прочитал и нихрена не понял. где именно ты объясняешь, зачем тебе if not exists Там написано: в предыдущем посте. Если Вам сложно вычислить предыдущий пост, даю ссылку 10043305 . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:36 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoRA\/ENпропущено... Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком... Перечитайте этот коммент: 10043343 Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:39 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaЕсли каждый юзер имеет право редактировать данные, то для этого создаётся одна таблица с доп. параметром owner - и она хранит данные по всем юзерам. Между таблицами могут быть связи и тогда всилу сказанного выше эту связь тяжело будет организовать. Пример. Запись в таблице А должна ссылаться на запись таблицы B. И тогда если a ссылается на b, то должно выполняться равенство a.schema=b.schema. Такое можно организовать? В оракле семантика выглядит как schema_name.object_name Если вы имеете ввиду обычную связь форин ки, то какие проблемы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Из каждой таблицы по конкретному user_id вы получите только то, что относится к конкретному юзеру. При этом никто вас не ограничивает в связях между а и b и это всё в одной схеме з.ы. команды писал по памяти. возможна ошибка в синтаксисе ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:42 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
RA\/ENboraldoпропущено... Перечитайте этот коммент: 10043343 Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами? Вы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:45 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Tolka Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Во-первых, как я уже писал, схема не на какждого юзера, а на каждую тему. Во-вторых, каким образом тут обеспечивается условие a.user = b.user ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:48 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoRA\/ENпропущено... Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами? Вы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ? По поводу последнего - внешний ключ может быть составным - дальше желающие додумаются. Вы, кстати, с экономией JDBC-шных вызовов в теме про комментарий не рассматривали вариант реализации всей этой логики на стороне БД и на PL/SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:54 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoВо-первых, как я уже писал, схема не на какждого юзера, а на каждую тему. Во-вторых, каким образом тут обеспечивается условие a.user = b.user ?Не хочется Вас расстраивать, но в тупом оракле schema == user (если не подходить к вопросу философски и рассматривать схему строго как набор объектов, а юзера - как идентифицирующую подключившегося пользователя сущность). По второму - гуглите sys_context и with check option. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 22:58 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoВы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ? я непонятно объясняю, но я также непонятно и думаю (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 23:02 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoВо-первых, как я уже писал, схема не на какждого юзера, а на каждую тему. Tolka Код: plaintext 1. 2. 3. 4.
user_type был намёком на то, что, вполне возможно, вам достаточно всего одной схемы, для решения всех вопросов. Будет у вас 20 тематик - вы будете приложение размазывать по 20и схемам?... boraldoВо-вторых, каким образом тут обеспечивается условие a.user = b.user ? Объясните данное условие. Я писал, что в оракле семантика schema_name.object_name. Что такое а и b? Таблицы? Поле user должно совпадать в таблицах? Вот вам составной ключ Tolka Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2011, 23:11 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoАдмин хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах. Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах. create table name as ( ... ) add to public role synonim ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 00:32 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции. Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC. вот именно. и сразу всё наладится. вы просто слабо представляете, на какую ёлку упорно пытаетесь влезть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 05:06 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
orawish, я это топикастеру упорно пытался объяснить еще в самом начале - 10040587 . Упорен черт возьми в своих заблуждениях.. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 08:54 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
orawishboraldoПо вашей логике вообще не нужно выполнять DDL через JDBC. вот именно. и сразу всё наладится. вы просто слабо представляете, на какую ёлку упорно пытаетесь влезть. Разговор пошёл интересно. Раз так, создал отдельную тему в ветке "Проектирование БД": 10044792 . Предлагаю этот вопрос обсуждать там. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 13:31 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Tolka Код: plaintext 1.
Это в общем-то решение. Можно подумать. Коробит только, что ещё уникальный индекс придётся создать на пару a (id, user_id). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 13:33 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Кто-то уже как бэboraldoАдмин хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах. Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах. create table name as ( ... ) add to public role synonim ? Я так понимаю это создаёт таблицу из запроса. Но это всё равно придётся выполнять в какой-то конкетный момент на конкретной схеме. Каким образом эта таблица появится в остальных схемах? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 13:37 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Остальные будут работать с единственной таблицей через синоним. О чем тебе уже талдычат раз пицотый в этой теме. Ты не думал заняться тем, что у тебя хорошо получается? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 13:51 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
овощщеедъОстальные будут работать с единственной таблицей через синоним. О чем тебе уже талдычат раз пицотый в этой теме. Синоним тут воообще не причём. Если будет одна таблица, то можно к ней и через qualifier схемы обращаться, это вообще не проблема. Проблему я уже описал несколько раз, читайте внимательнее. овощщеедъТы не думал заняться тем, что у тебя хорошо получается? Я и занимаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 13:56 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
boraldoПроблему я уже описал несколько раз, читайте внимательнее. Не описал ты проблему. Ни разу. Только свои завирательные идеи класса "а вот сделаю чтобы оно ещё и дым из ушей выпускало". Какую проблему ты пытаешься решить своими "ленивыми таблицами"? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2011, 14:08 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Пипец вы злые и срач ни о чём развели. Чувак, копай в сторону списка таблиц (так же можно получить список триггеров, последовательностей, например) и Exception, например так: Делать что-то, если таблица есть: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Делать что-то, если таблицы нет: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 14:13 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
PoprygunПипец вы злые и срач ни о чём развели. Чувак, копай в сторонуЧудак, с ручника-то снимись. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 14:23 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
Poprygun, Ты-бы на дату посмотрел прежде чем некрофилией заниматься. Ну и усвой, Oracle не MS SQL - здесь таблицы создаются один раз а не динамически создал/удалил. Но даже если использовать такой порочный дизайн твой код может и не сработать. Медитируй над что есть ALL_TABLES. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 14:37 |
|
Как сделать if not exists в запросе create table ?
|
|||
---|---|---|---|
#18+
SYТы-бы на дату посмотрел прежде чем некрофилией заниматься.Ты бы его другое из всех обоих сообщений посмотрел. Ему про некро- уже отвечали несколько лет назад. Poprygun Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Во-первых, уже предлагали "обарачивать надо в еxcute immediate с обработкой ошибок". Во-вторых, код некорректный. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2019, 15:04 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882371]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 177ms |
0 / 0 |