powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сделать if not exists в запросе create table ?
25 сообщений из 76, страница 3 из 4
Как сделать if not exists в запросе create table ?
    #37049531
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.
Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком...
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049533
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TolkaДанные в этой таблице одни для всех?
Данные в таблице свои для каждой схемы.

TolkaЕсли каждый юзер имеет право редактировать данные, то для этого создаётся одна таблица с доп. параметром owner - и она хранит данные по всем юзерам.
Между таблицами могут быть связи и тогда всилу сказанного выше эту связь тяжело будет организовать.
Пример. Запись в таблице А должна ссылаться на запись таблицы B. И тогда если a ссылается на b, то должно выполняться равенство a.schema=b.schema. Такое можно организовать?

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

Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком...
Перечитайте этот коммент: 10043343
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049540
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoПеречитайте этот коммент: 10043343
ну вот я прочитал и нихрена не понял.
где именно ты объясняешь, зачем тебе if not exists
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049544
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
брадобрейboraldoПеречитайте этот коммент: 10043343
ну вот я прочитал и нихрена не понял.
где именно ты объясняешь, зачем тебе if not exists
Там написано: в предыдущем посте. Если Вам сложно вычислить предыдущий пост, даю ссылку 10043305 .
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049546
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoRA\/ENпропущено...

Админ Вова создал таблицу DATA_TABLE для хранения чего-нибудь. Потом админ Дима хочет создать таблицу DATA_TABLE для хранения другого чего-нибудь (или админ Вова впал в маразм и забыл про то, что таблица есть) - так что, CREATE IF NOT EXISTS должно сказать что "все ОК", но при этом НЕ СОЗДАТЬ таблицу? Эта логика из какого-то другого мира программирования, с которым я не знаком...
Перечитайте этот коммент: 10043343
Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049547
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
create table users (us_id     number primary key us_pk,
                    name      varchar2( 30  char),
                    user_type varchar2( 30  char) -- EMPLOYEE, MANAGER, PR... "тематика"
);

create table a(id      number primary key
              ,data    varchar2( 30  char)
              ,user_id number constraint user_fk foreign key references users(us_id));

create table b(id number primary key
              ,data    varchar2( 30  char)
              ,a_id    number constraint a_fk foreign key references a(a_id)
              ,user_id number constraint user_fk foreign key references users(us_id));

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

и это всё в одной схеме

з.ы. команды писал по памяти. возможна ошибка в синтаксисе
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049552
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RA\/ENboraldoпропущено...

Перечитайте этот коммент: 10043343
Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами?
Вы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049553
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tolka
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table users (us_id     number primary key us_pk,
                    name      varchar2( 30  char),
                    user_type varchar2( 30  char) -- EMPLOYEE, MANAGER, PR... "тематика"
);

create table a(id      number primary key
              ,data    varchar2( 30  char)
              ,user_id number constraint user_fk foreign key references users(us_id));

create table b(id number primary key
              ,data    varchar2( 30  char)
              ,a_id    number constraint a_fk foreign key references a(a_id)
              ,user_id number constraint user_fk foreign key references users(us_id));


Во-первых, как я уже писал, схема не на какждого юзера, а на каждую тему.

Во-вторых, каким образом тут обеспечивается условие a.user = b.user ?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049563
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoRA\/ENпропущено...

Этот комент не раскрывает темы маразма админа Вовы. Как бедный админ узнает, что его жалкая попытка создать таблицу провалилась потому, что такая таблица уже есть? Тема там раскрыта "в предыдущем посте", который был написан позже того, как я начал писать свой. В общем, это как-то чудовищно слишком... В MySQL нет (public) синонимов? Отсюда такое странное решение по тиражированию строго одинаковых таблиц между схемами?
Вы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ? По поводу последнего - внешний ключ может быть составным - дальше желающие додумаются. Вы, кстати, с экономией JDBC-шных вызовов в теме про комментарий не рассматривали вариант реализации всей этой логики на стороне БД и на PL/SQL?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049571
Фотография RA\/EN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoВо-первых, как я уже писал, схема не на какждого юзера, а на каждую тему.

Во-вторых, каким образом тут обеспечивается условие a.user = b.user ?Не хочется Вас расстраивать, но в тупом оракле schema == user (если не подходить к вопросу философски и рассматривать схему строго как набор объектов, а юзера - как идентифицирующую подключившегося пользователя сущность).
По второму - гуглите sys_context и with check option.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049574
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoВы читали эти комменты: 10043305 (в нём объясняется, зачем нужна опция if not exists) и 10043435 (в нём объясняется, почему не хочется хранить всё в одной таблице) ?
я непонятно объясняю, но я также непонятно и думаю (с)
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049587
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoВо-первых, как я уже писал, схема не на какждого юзера, а на каждую тему.

Tolka
Код: plaintext
1.
2.
3.
4.
create table users (us_id     number primary key us_pk,
                    name      varchar2( 30  char),
                    user_type varchar2( 30  char) -- EMPLOYEE, MANAGER, PR... "тематика"
);


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.
create table a(id      number primary key
              ,data    varchar2( 30  char)
              ,user_id number constraint user_fk foreign key references users(us_id));

create table b(id number primary key
              ,data    varchar2( 30  char)
              ,a_id    number
              ,user_id number);

alter table b add constraint a_fk foreign key (a_id, user_id) references a (id, user_id);
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049701
boraldoАдмин хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах.
Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах.

create table name as ( ... )
add to public role synonim

?
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049858
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boraldoTolkaНо всё дело в том, что динамическое создание таблиц - это зло. Вам об этом все пытаются намекнуть, но вы акцентируетесь на отсутствии такой опции.
Да почему зло то? Админ хочет хранить некие данные в базе, создаёт таблицу. Чтобы ему не устанавливать клиента он заходит в приложение через веб и создаёт таблицу. По вашей логике вообще не нужно выполнять DDL через JDBC.
вот именно. и сразу всё наладится.
вы просто слабо представляете, на какую ёлку упорно пытаетесь влезть.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37049887
semenar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish, я это топикастеру упорно пытался объяснить еще в самом начале - 10040587 . Упорен черт возьми в своих заблуждениях..
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37050032
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawishboraldoПо вашей логике вообще не нужно выполнять DDL через JDBC.
вот именно. и сразу всё наладится.
вы просто слабо представляете, на какую ёлку упорно пытаетесь влезть.
Разговор пошёл интересно. Раз так, создал отдельную тему в ветке "Проектирование БД": 10044792 .
Предлагаю этот вопрос обсуждать там.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37050037
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tolka
Код: plaintext
1.
alter table b add constraint a_fk foreign key (a_id, user_id) references a (id, user_id);

Это в общем-то решение. Можно подумать.
Коробит только, что ещё уникальный индекс придётся создать на пару a (id, user_id).
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #37050040
boraldo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-то уже как бэboraldoАдмин хочет хранить некие данные в таблице, причём такая таблица должна быть во всех схемах.
Он заходит в условно "свою" схему, добавляет описание этой таблицы, а потом она должна появиться во всех схемах.

create table name as ( ... )
add to public role synonim

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

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

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

Не описал ты проблему. Ни разу. Только свои завирательные идеи класса "а вот сделаю чтобы
оно ещё и дым из ушей выпускало". Какую проблему ты пытаешься решить своими "ленивыми
таблицами"?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сделать if not exists в запросе create table ?
    #39828795
Poprygun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пипец вы злые и срач ни о чём развели.
Чувак, копай в сторону списка таблиц (так же можно получить список триггеров, последовательностей, например) и Exception, например так:

Делать что-то, если таблица есть:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN
    FOR cc IN (
        SELECT table_name
        FROM all_tables
        WHERE table_name = 'TableNameHere')
        LOOP
            EXECUTE IMMEDIATE 'DROP TABLE TableNameHere';
        END LOOP;
END;




Делать что-то, если таблицы нет:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE
    itFound VARCHAR2(1000);
BEGIN
    SELECT table_name INTO itFound FROM all_tables WHERE table_name = 'TableNameHere');
EXCEPTION
    WHEN no_data_found THEN
        EXECUTE IMMEDIATE 'CREATE TABLE TableNameHere (id INT)';
END;
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #39828799
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PoprygunПипец вы злые и срач ни о чём развели.
Чувак, копай в сторонуЧудак, с ручника-то снимись.
...
Рейтинг: 0 / 0
Как сделать if not exists в запросе create table ?
    #39828809
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Poprygun,

Ты-бы на дату посмотрел прежде чем некрофилией заниматься. Ну и усвой, Oracle не MS SQL - здесь таблицы создаются один раз а не динамически создал/удалил. Но даже если использовать такой порочный дизайн твой код может и не сработать. Медитируй над что есть ALL_TABLES.

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


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