Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Использую в своей работе pl-sql developer.
Попытался с помощью него изменить определение уникального ключа на таблице.
Выскочила ошибка и ключ вообще пропал, т.е. в режиме редактирования или просмотра определения таблицы в закладке Ключи в списке его теперь нет, но если нажать на кнопку Посмотреть SQL, то в скрипте его определение появляется.

Я пытаюсь удалить этот ключ

ALTER TABLE tbl_name
DROP CONSTRAINT cnstr_name;

Пишет, что ключа с таким именем нет.

Смотрю список всех констрейнтов:

select * from all_constraints c where c.CONSTRAINT_NAME='cnstr_name';
ну или так
select * from all_constraints c where c.TABLE_NAME='tbl_name';

ключа нет.

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

Как можно гарантированно очистить базу от этого ключа?
5 ноя 20, 12:20    [22226784]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
а)название темы некорректное. Ни о чем не говорит.
б)чудес не быает (по крайней мере, с констрэйнтами). под чудом таки понимаю ошибку вендора субд
в)кроме вью all_ бывают вью dba_, которые не подразумевают ограничения по правам
г)констрэйнты надо искать не по имени, а по столбцам задействованных таблиц
5 ноя 20, 12:41    [22226806]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Проблема решилась.

Когда создаётся уникальный ключ, т.е. уникальный констраент, то автоматом создаётся ещё и индекс.
В Pl-SQL developer'е нужно сначала удалить этот индекс, а потом только ключ, иначе ключ удалится, а индекс останется и констрейнт будет продолжать работать.
Я ошибся, когда смотришь определение таблицы, то в скрипте на самом деле было видно определение индекса, а не констрейнта.
5 ноя 20, 12:45    [22226813]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
verter,
upper не пробовали?

... c.CONSTRAINT_NAME=upper('cnstr_name');

ps
гляньте все констраинты на табличке
зыы
констраинта может и "не быть", индекс не даст добавить строку
гляньте индексы

.....
stax
5 ноя 20, 12:49    [22226815]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Stax
verter,
upper не пробовали?

... c.CONSTRAINT_NAME=upper('cnstr_name');

ps
гляньте все констраинты на табличке
зыы
констраинта может и "не быть", индекс не даст добавить строку
гляньте индексы

.....
stax


upper, конечно пробывал и без upper вызывал же список всех констрентов таблицы, все выдавались кроме искомого.

ну а с индексами нужно же было сначала догадаться.
5 ноя 20, 12:51    [22226817]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
verter
ключа нет.
Но он есть и действует, потому что когда я пытаюсь вставить в таблицу что то удовлетворяющее его ограничением, то оракл выдаёт мне ошибку что сработал уникальный ключ
Ограничение уникальности технически реализуется посредством уникального индекса.
Такой индекс либо создаётся автоматически при создании ограничения, либо существует заранее.
Во втором случае уникальный индекс не удаляется автоматически при удалении ограничения уникальности. Типичный сценарий второго случая - импорт.
verter
Как можно гарантированно очистить базу от этого ключа?
Всегда указывать drop index. RTFM drop_constraint_clause
5 ноя 20, 12:51    [22226818]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
Elic
verter
ключа нет.
Но он есть и действует, потому что когда я пытаюсь вставить в таблицу что то удовлетворяющее его ограничением, то оракл выдаёт мне ошибку что сработал уникальный ключ
Ограничение уникальности технически реализуется посредством уникального индекса.
Такой индекс либо создаётся автоматически при создании ограничения, либо существует заранее.
Во втором случае уникальный индекс не удаляется автоматически при удалении ограничения уникальности. Типичный сценарий второго случая - импорт.
verter
Как можно гарантированно очистить базу от этого ключа?
Всегда указывать drop index. RTFM drop_constraint_clause


Спасибо. Именно так и вышло.
5 ноя 20, 12:52    [22226819]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Elic
Ограничение уникальности технически реализуется посредством уникального индекса.
5 ноя 20, 15:57    [22226970]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
andrey_anonymous
Elic
Ограничение уникальности технически реализуется посредством уникального индекса.
Напрасно нагнетаешь глубину "техничности". dup_val не из воздуха берётся.
5 ноя 20, 22:48    [22227223]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
чтобы не было подобных проблем, по идее, не стоит городить дополнительной сущноти - констрэйнта. достаточно создавать индекс

Сообщение было отредактировано: 5 ноя 20, 23:21
5 ноя 20, 23:20    [22227233]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Elic,


Кроме автоматического создания уникального индекса, объявление первичного ключа ещё как-то влияет на таблицу, или это чисто декоративный ярлык для помечания "главной" колонки?
6 ноя 20, 00:06    [22227251]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
Allbest
чтобы не было подобных проблем, по идее, не стоит городить дополнительной сущноти - констрэйнта. достаточно создавать индекс
Бред.
6 ноя 20, 00:27    [22227260]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
НеофитSQL
Кроме автоматического создания уникального индекса, объявление первичного ключа ещё как-то влияет на таблицу, или это чисто декоративный ярлык для помечания "главной" колонки?
Глубина пропасти твоего невежества чудовищна. Нет смысла бросать туда жемчуга.
6 ноя 20, 00:30    [22227262]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Elic
andrey_anonymous
пропущено...
Напрасно нагнетаешь глубину "техничности". dup_val не из воздуха берётся.


Уж от кого-кого, но от тебя как-то не ждал...

create table dropme_t(id integer);
Table created

create index dropme_t$id on dropme_t(id);
Index created

alter table dropme_t add constraint dropme_t#pk primary key(id) using index dropme_t$id;
Table altered

select INDEX_NAME, INDEX_TYPE, UNIQUENESS
  from user_indexes
 where table_name like 'DROPME_T';
 
INDEX_NAME     INDEX_TYPE UNIQUENESS
-------------- ---------- ----------
DROPME_T$ID    NORMAL     NONUNIQUE

insert into dropme_t values(1);
1 row inserted

insert into dropme_t values(1);
 
insert into dropme_t values(1)
 
ORA-00001: unique constraint (GIS_MRG.DROPME_T#PK) violated
6 ноя 20, 00:30    [22227263]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
andrey_anonymous
Уж от кого-кого, но от тебя как-то не ждал...
Я от тебя тоже: ты утверждаешь, что уникальных индексов не бывает?
О вреде квантора всеобщности…
6 ноя 20, 00:40    [22227264]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Elic
НеофитSQL
Кроме автоматического создания уникального индекса, объявление первичного ключа ещё как-то влияет на таблицу, или это чисто декоративный ярлык для помечания "главной" колонки?
Глубина пропасти твоего невежества чудовищна. Нет смысла бросать туда жемчуга.


Оракл эксперт Том объясняет, что разница в основном в названии.

https://asktom.oracle.com/pls/apex/f?p=100:11:::::P11_QUESTION_ID:4941517587762

Вот и все "жемчуга".
6 ноя 20, 00:46    [22227269]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Доки оракла пишут, что constraint уникальности для PK осуществляется с помощью индекса, которому необязательно быть уникальным. В MsSql вроде так же.
6 ноя 20, 00:52    [22227271]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
НеофитSQL
разница в основном в названии.
"В огороде бузина, а в Киеве дядько."
6 ноя 20, 00:53    [22227272]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Elic
НеофитSQL
разница в основном в названии.
"В огороде бузина, а в Киеве дядько."


Иногда, чтобы задать "очевидный" вопрос, требуется свежий взгляд новичка.

А вот чтобы грамотно ответить, нужны знания эксперта.

Из ответа Тома следует, что любой активный PK можно заменить на уникальный индекс плюс not nullable constraint.

А наоборот - не всегда.
6 ноя 20, 01:01    [22227282]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
Elic
Allbest
чтобы не было подобных проблем, по идее, не стоит городить дополнительной сущноти - констрэйнта. достаточно создавать индекс
Бред.


Обоснуй
6 ноя 20, 01:05    [22227284]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
НеофитSQL
требуется свежий
Твою энергию направить бы на что-нибудь полезное вместо захламления форума самолюбивой пургой…
6 ноя 20, 01:11    [22227286]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
у pl-sql developer всё таки есть глюк.
теперь я попытался сначала удалить индекс на уникальный ключ с помощью GUI - ошибка, не могу говорит удалить индекс такой, так а как тогда? ключ удаляю сначала ошибка, индекс - тоже.
если дропнуть констрейнт скриптом, то всё корректно удалиться - и ключ и индекс.
6 ноя 20, 01:19    [22227290]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Elic
НеофитSQL
требуется свежий
Твою энергию направить бы на что-нибудь полезное вместо захламления форума самолюбивой пургой…


У меня цель - узнать больше про Оракл от живых людей.

Сегодня я узнал про новую для меня команду pivot, а также про то, что уникальность в ключе можно обеспечить неуникальным индексом. И почитал почему это может быть полезно на практике (deferred, если кому интересно).

От Вас я сегодня ничему не научился, вы почему-то не в настроении для продуктивного общения.
6 ноя 20, 01:28    [22227292]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
verter,
конкретную ora- то можно узнать?
6 ноя 20, 01:28    [22227293]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
НеофитSQL

От Вас я сегодня ничему не научился, вы почему-то не в настроении для продуктивного общения.


Для этого персонажа вполне типично
6 ноя 20, 01:36    [22227297]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
verter
у pl-sql developer всё таки есть глюк.
Просто ты дитя гуя.
6 ноя 20, 01:47    [22227299]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Allbest
Member

Откуда:
Сообщений: 143
Elic
verter
у pl-sql developer всё таки есть глюк.
Просто ты дитя гуя.


22210175
6 ноя 20, 01:55    [22227301]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Elic
andrey_anonymous
Уж от кого-кого, но от тебя как-то не ждал...
Я от тебя тоже: ты утверждаешь, что уникальных индексов не бывает?

Я утверждаю, что в твоем тезисе относительно технической реализации PK термин "уникальный" - лишний, и должен быть заменен термином "B-Tree".
6 ноя 20, 04:06    [22227306]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
verter
у pl-sql developer всё таки есть глюк.
теперь я попытался сначала удалить индекс на уникальный ключ с помощью GUI - ошибка, не могу говорит удалить индекс такой, так а как тогда? ключ удаляю сначала ошибка, индекс - тоже.

В окошке редактирования таблицы справа внизу кнопочка смешная есть - "Показать SQL" называется.
Нажмите ее перед применением изменений и получите ответы на свои вопросы.
6 ноя 20, 04:16    [22227307]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
andrey_anonymous

В окошке редактирования таблицы справа внизу кнопочка смешная есть - "Показать SQL" называется.
Нажмите ее перед применением изменений и получите ответы на свои вопросы.


У меня недавно была ситуация, где эта кнопочка в pl/sql developer показала ложный DDL (плохой синтакс).
6 ноя 20, 07:34    [22227323]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
показала ложный DDL

Про ложные опята слышал, а ложный DDL - это как? Вместо create table возвращает drop database?

Прежде чем обвинять средство в ошибках, стоит посмотреть какие стоят настройки генерации DDL и подумать, хватает ли прав на их использование.

з.ы. разумеется тулзы порой косячат, но чаще косячат их пользователи
6 ноя 20, 09:19    [22227350]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
andrey_anonymous
verter
у pl-sql developer всё таки есть глюк.
теперь я попытался сначала удалить индекс на уникальный ключ с помощью GUI - ошибка, не могу говорит удалить индекс такой, так а как тогда? ключ удаляю сначала ошибка, индекс - тоже.

В окошке редактирования таблицы справа внизу кнопочка смешная есть - "Показать SQL" называется.
Нажмите ее перед применением изменений и получите ответы на свои вопросы.


Ну как бы я знаю как получить скрипт в pl-sql developer’е :)

Дело то не в этом, просто заметил глюк гуи и сразу не разобрался, написал сюда, сейчас уже всё абсолютно ясно.
6 ноя 20, 13:05    [22227474]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
Ложные опята для неофитов.

Как и в тексте можно что-то недописать, так и в гуях.

К сообщению приложен файл. Размер - 8Kb
6 ноя 20, 13:16    [22227481]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
НеофитSQL
PK можно заменить на уникальный индекс плюс not nullable constraint.

ЧЯДНТ?
create table dropme_t(pk integer primary key, uniq_idx integer not null);
Table created

create unique index dropme_t$uniq_idx on dropme_t(uniq_idx);
Index created

create table dropme_ch1_t(fk integer references dropme_t(pk));
Table created

create table dropme_ch2_t(fk_uniq integer references dropme_t(uniq_idx));
 
create table dropme_ch2_t(fk_uniq integer references dropme_t(uniq_idx))
 
ORA-02270: no matching unique or primary key for this column-list
---WTF?! Юниор же сказал - можно!
6 ноя 20, 13:51    [22227509]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Это все-таки скорее не к Неофиту, а к тому кренделю, который считает, что индекса достаточно, а ограничение (констрейнт по буржуински) поднимать не обязательно
6 ноя 20, 14:23    [22227530]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
НеофитSQL
показала ложный DDL

Про ложные опята слышал, а ложный DDL - это как? Вместо create table возвращает drop database?

Прежде чем обвинять средство в ошибках, стоит посмотреть какие стоят настройки генерации DDL и подумать, хватает ли прав на их использование.

з.ы. разумеется тулзы порой косячат, но чаще косячат их пользователи


В этом случае накосячил тул - показал sql который не парсится ораклом.

22204472
6 ноя 20, 14:41    [22227543]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
НеофитSQL


В этом случае накосячил тул



Как только напишете тул, который учитывает все варианты, которые может ввести прокладка между монитором и стулом - приходите, поговорим про косяки.
6 ноя 20, 14:54    [22227554]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
В этом случае накосячил тул

А версия тула достаточно свежая, чтобы адекватно понимать виртуальные колонки?
6 ноя 20, 15:06    [22227558]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
НеофитSQL
В этом случае накосячил тул

А версия тула достаточно свежая, чтобы адекватно понимать виртуальные колонки?


Полагаю что да, т.к. виртуальные колонки были в нем созданы.
6 ноя 20, 15:14    [22227561]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
dmdmdm
НеофитSQL


В этом случае накосячил тул



Как только напишете тул, который учитывает все варианты, которые может ввести прокладка между монитором и стулом - приходите, поговорим про косяки.


Легко: echo.exe

Не уверен, что вы хотели сказать.
6 ноя 20, 15:18    [22227563]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL,

Поддержка синтакиса создания чего-либо, не обязательно означает поддержку правильного получения описания из словаря данных.

Попробовал на версии 13.0.6 - проблем с генерацией не наблюдается.
6 ноя 20, 15:25    [22227567]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9278
НеофитSQL

Легко: echo.exe

А где такой можно скачать?
6 ноя 20, 15:25    [22227568]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
Легко: echo.exe


> echo.exe "


> 


И где моя кавычка?
6 ноя 20, 15:27    [22227570]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9278

Microsoft Windows [Version 10.0.16299.2166]
(c) Корпорация Майкрософт (Microsoft Corporation), 2017. Все права защищены.

C:\Users\kudryavtsev_le\IdeaProjects\Excel\lib>echo.exe aaaa
exe aaaa

C:\Users\kudryavtsev_le\IdeaProjects\Excel\lib>echo.exe "
exe "

у меня с кавычками все нормально /Windows 7/
Не стабильный тулз какой-то, да и с ".exe" проблемка

Сообщение было отредактировано: 6 ноя 20, 15:26
6 ноя 20, 15:30    [22227571]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Leonid Kudryavtsev,

Так у вас небось встроенный виндовый


> echo.exe --version
echo (GNU coreutils) 8.26
Packaged by Cygwin (8.26-2)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.

С виндовым можно ещё повозмущаться на конструкции вида

> echo <<11111

> echo >>a:\\log.log

Эха не происходит

Сообщение было отредактировано: 6 ноя 20, 15:32
6 ноя 20, 15:36    [22227573]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
andrey_anonymous
НеофитSQL
PK можно заменить на уникальный индекс плюс not nullable constraint.

ЧЯДНТ?
create table dropme_t(pk integer primary key, uniq_idx integer not null);
Table created

create unique index dropme_t$uniq_idx on dropme_t(uniq_idx);
Index created

create table dropme_ch1_t(fk integer references dropme_t(pk));
Table created

create table dropme_ch2_t(fk_uniq integer references dropme_t(uniq_idx));
 
create table dropme_ch2_t(fk_uniq integer references dropme_t(uniq_idx))
 
ORA-02270: no matching unique or primary key for this column-list
---WTF?! Юниор же сказал - можно!


Юниор учится :)

Я вижу из этого примера, что unique index (+ non-nullable) может заменить constraints PK/UK внутри таблицы, но не способен заменить constraints между таблицами.

Теперь я могу ответить на свой вопрос более полно:
> Кроме автоматического создания уникального индекса, объявление первичного ключа ещё как-то влияет на таблицу,
> или это чисто декоративный ярлык для помечания "главной" колонки?

1) объявление первичного ключа не обязательно создает уникальный индекс. В зависимости от опций, он может создать неуникальный индекс, а также может использовать уже существующий индекс.
2) вне зависимости от типа индекса, первичный ключ использует его для обеспечения уникальности значений в колонке/колонках ключа, также запретит null
3) отличия первичного ключа и уникального ключа: первичный ключ не позволяет nulls, уникальный разрешает пустышки (если колонку/колонки ключа объявить not nullable, это различие пропадает). Второе - индексы для поддержки первичного ключа обычно создаются кластерного типа. Что такое кластерный тип индекса, я еще не читал. Наверное, что-то связанное со скоростью.

Выводы:
- если на таблицу нет ссылок, первичный/уникальные ключи можно заменить на индексы
- если на таблицу есть ссылки, ключи необходимы для обеспечения ссылок
- первичный ключ можно заменить уникальным, но это может снизить скорость.
6 ноя 20, 15:53    [22227581]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Leonid Kudryavtsev
НеофитSQL

Легко: echo.exe

А где такой можно скачать?


Давайте я вам лучше исходник дам, скачивать ехешники стремно (для меня, по крайней мере).
6 ноя 20, 15:56    [22227585]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
индексы для поддержки первичного ключа обычно создаются кластерного типа


Ссылку на доку дайте, где это написано. В sql reference про это ни слова, может упустил чего?
6 ноя 20, 15:58    [22227586]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
НеофитSQL,

Поддержка синтакиса создания чего-либо, не обязательно означает поддержку правильного получения описания из словаря данных.

Попробовал на версии 13.0.6 - проблем с генерацией не наблюдается.


В теме которую я привел, ситуация была следующая:

- создал таблицу в GUI, нажал Apply - все создалось
- Нажал "Show SQL" - показало DDL, правдоподобный но непригодный для Оракла
- посмотрел через dbms_ddl - показало правильный DDL.

Похоже на ошибку тулза, который не может из Оракла вытащить и показать правильный DDL, а берет его непонятно откуда.

Ошибкой в целом является поведение первых двух шагов. Третий шаг намекает что Оракл 11.2 скорее всего не виноват.
6 ноя 20, 16:01    [22227589]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL,

Поэтому и спрашиваю про версию. Полноценная поддержка новых фич СУБД в таких тулзах не всегда успевает за их появлением.
В относительно свежей версии pl/sql developer повторить кейс не получилось, рекомендую обновиться. (он же у вас честно купленный, правда?)
6 ноя 20, 16:06    [22227593]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
НеофитSQL
env
НеофитSQL,

Поддержка синтакиса создания чего-либо, не обязательно означает поддержку правильного получения описания из словаря данных.

Попробовал на версии 13.0.6 - проблем с генерацией не наблюдается.


В теме которую я привел, ситуация была следующая:

- создал таблицу в GUI, нажал Apply - все создалось
- Нажал "Show SQL" - показало DDL, правдоподобный но непригодный для Оракла
- посмотрел через dbms_ddl - показало правильный DDL.

Похоже на ошибку тулза, который не может из Оракла вытащить и показать правильный DDL, а берет его непонятно откуда.

Ошибкой в целом является поведение первых двух шагов. Третий шаг намекает что Оракл 11.2 скорее всего не виноват.


В GUI PL-SQL Developer'а есть такая особенность:
Если выбираешь Показать структуру таблицы и потом нажимаешь Посмотреть SQL, то всё красиво, а если выбираешь Редактировать структуру таблицы и потом Просмотр SQL, то видишь чушь.
6 ноя 20, 16:08    [22227597]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 1018
версия девелопера 10.0.3.1701
6 ноя 20, 16:10    [22227598]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
НеофитSQL
индексы для поддержки первичного ключа обычно создаются кластерного типа


Ссылку на доку дайте, где это написано. В sql reference про это ни слова, может упустил чего?


Посмотрите здесь: https://asktom.oracle.com/pls/apex/asktom.search?tag=clustered-index-and-primary-keys

Там со второй попытки эксперт Том объясняет что это что-то связанное с кластерами, я не вникал.
6 ноя 20, 16:10    [22227600]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env
Leonid Kudryavtsev,

Так у вас небось встроенный виндовый


> echo.exe --version
echo (GNU coreutils) 8.26
Packaged by Cygwin (8.26-2)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.

С виндовым можно ещё повозмущаться на конструкции вида

> echo <<11111

> echo >>a:\\log.log

Эха не происходит


Напомнило анекдот: https://4tob.ru/anekdots/2457
6 ноя 20, 16:17    [22227604]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
verter

В GUI PL-SQL Developer'а есть такая особенность:
Если выбираешь Показать структуру таблицы и потом нажимаешь Посмотреть SQL, то всё красиво, а если выбираешь Редактировать структуру таблицы и потом Просмотр SQL, то видишь чушь.


Очень дельное замечание.
Учту, а то как-то некомфортно было жать на "Show SQL" и гадать, правда там или нет.
6 ноя 20, 16:19    [22227605]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL,

Смешались в кучу кони, люди и залпы тысячи орудий....

Нет, это совсем про другое и никакого отношения к обычным первичным ключам на heap-organized таблицах не имеет.

Рекомендация создавать первичный ключ кластерным индексом действительно есть. В ms sql server. И там кластерный индекс это совершенно другое понятие, прямо связанное с организацией хранения данных.
6 ноя 20, 16:21    [22227607]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
НеофитSQL

Я вижу из этого примера, что unique index (+ non-nullable) может заменить constraints PK/UK внутри таблицы, но не способен заменить constraints между таблицами.

Тут уместно задать вопрос: а что такое вообще constraint и чем он отличается от индекса/триггера/еще какой-нибудь лабудени?
Что такое первичный ключ, для зачем придуман?
Сумеете разобраться - посмеетесь со своих сентенций.

НеофитSQL

1) объявление первичного ключа не обязательно создает уникальный индекс. В зависимости от опций, он может создать неуникальный индекс, а также может использовать уже существующий индекс.

Также возможно использование индекса, не совпадающего со множеством атрибутов первичного/уникального ключа. Условия такого использования найдете самостоятельно.
Это свойство удобно использовать при наличии подходящего поискового индекса, чтобы не плодить лишний индекс для PK/UK.

НеофитSQL

2) вне зависимости от типа индекса, первичный ключ использует его для обеспечения уникальности

Точно?
Bitmap, FBI, доменный индекс... - любой использует?

НеофитSQL

индексы для поддержки первичного ключа обычно создаются кластерного типа. Что такое кластерный тип индекса, я еще не читал. Наверное, что-то связанное со скоростью.

Не стоит выдавать "нагора" великие знания, в которых Вы еще не разобрались.
Почитаете - расскажете про "кластерный тип", я еще раз посмеюсь :)

НеофитSQL

- если на таблицу нет ссылок, первичный/уникальные ключи можно заменить на индексы

Отсылаю к первому комментарию.
PK - это Constraint, а не индекс.
Не следует одно заменять другим.

НеофитSQL

- первичный ключ можно заменить уникальным, но это может снизить скорость.

Шо? Опять?!
6 ноя 20, 17:06    [22227646]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
env
Рекомендация создавать первичный ключ кластерным индексом действительно есть. В ms sql server.

Именно.
В Oracle такого понятия нет.
Ближайший аналог - Index-organized table.
6 ноя 20, 17:08    [22227650]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
andrey_anonymous
НеофитSQL

Я вижу из этого примера, что unique index (+ non-nullable) может заменить constraints PK/UK внутри таблицы, но не способен заменить constraints между таблицами.

Тут уместно задать вопрос: а что такое вообще constraint и чем он отличается от индекса/триггера/еще какой-нибудь лабудени?
Что такое первичный ключ, для зачем придуман?
Сумеете разобраться - посмеетесь со своих сентенций.


>Что такое первичный ключ, для зачем придуман?

Это вопрос, который я изначально задал. Никто просто и внятно пока не ответил, хотя несколько участников намекнули что знают.
Книжное определение следующее: это тот ключ, который используется для однозначного определения строки таблицы.
На вопрос как быть с таблицами, где однозначное определение возможно без первичного ключа, книга не отвечает.
Из того что я знаю на сегодня, первичный ключ мало чем (nullable) отличается от уникального ключа, и служит для помечания "главного ключа" таблицы для программистов и для моделей. Декоративная такая табличка.

andrey_anonymous

НеофитSQL

1) объявление первичного ключа не обязательно создает уникальный индекс. В зависимости от опций, он может создать неуникальный индекс, а также может использовать уже существующий индекс.

Также возможно использование индекса, не совпадающего со множеством атрибутов первичного/уникального ключа. Условия такого использования найдете самостоятельно.
Это свойство удобно использовать при наличии подходящего поискового индекса, чтобы не плодить лишний индекс для PK/UK.


Это возможно важное дополнение, но я пока не могу прочувствовать его полезность - нет опыта.

andrey_anonymous

НеофитSQL

2) вне зависимости от типа индекса, первичный ключ использует его для обеспечения уникальности

Точно?
Bitmap, FBI, доменный индекс... - любой использует?


Индекса, совместимого с ключом. Я знаю что ключ в Оракле требует присутствия или уникального, или "нормального" индекса.
Надеюсь, это было понятно из контекста.

andrey_anonymous

НеофитSQL

индексы для поддержки первичного ключа обычно создаются кластерного типа. Что такое кластерный тип индекса, я еще не читал. Наверное, что-то связанное со скоростью.

Не стоит выдавать "нагора" великие знания, в которых Вы еще не разобрались.
Почитаете - расскажете про "кластерный тип", я еще раз посмеюсь :)


без комментария.

andrey_anonymous

НеофитSQL

- если на таблицу нет ссылок, первичный/уникальные ключи можно заменить на индексы

Отсылаю к первому комментарию.
PK - это Constraint, а не индекс.
Не следует одно заменять другим.


Constraints бывают разные. Ограничение уникальности может быть представлено как PK, или как уникальный индекс.

andrey_anonymous

НеофитSQL

- первичный ключ можно заменить уникальным, но это может снизить скорость.

Шо? Опять?!


Щас спою! :)

нет, ранее я рассуждал что первичный ключ можно заменить уникальным индексом.
Вы привели пример, который это опроверг: использование внешних ключей требует ключ в родительской таблице.
Этот ключ может быть первичным, или этот ключ может быть уникальным.
6 ноя 20, 18:07    [22227681]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
НеофитSQL,

constraint и index, назначение их в чем?

PS: как же тяжело твоим коллегам с таким тугим интерном ...
6 ноя 20, 19:52    [22227732]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
graycode
НеофитSQL,

constraint и index, назначение их в чем?

PS: как же тяжело твоим коллегам с таким тугим интерном ...


Я этот вопрос как раз и задал.

Если знаете, скажите. Только не из учебника, а подумав.
6 ноя 20, 20:13    [22227749]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
НеофитSQL,

Так прочитай определения из учебника, а если ты не в состоянии понять самые самые простые вещи, ты ошибся специальностью.
6 ноя 20, 22:13    [22227807]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode

constraint и index, назначение их в чем?

PS: как же тяжело твоим коллегам с таким тугим интерном ...


есть констраинт или нет?
SQL> drop table test;

Table dropped.

SQL> create table test(id int,n varchar2(10));

Table created.

SQL> create unique index i$test$id on test(id);

Index created.

SQL> ed
Wrote file afiedt.buf

  1* select * from dba_constraints where table_name='TEST'
SQL> /

no rows selected

SQL>


.....
stax
9 ноя 20, 11:03    [22228599]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
Stax
есть констраинт или нет?
А сам как думаешь? И к чему спрашиваешь?
9 ноя 20, 11:14    [22228607]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax
есть констраинт или нет?

Ты объявлял constraint?

PS: у тебя даже индекс стрёмный))
9 ноя 20, 13:58    [22228739]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode
Stax
есть констраинт или нет?

Ты объявлял constraint?

PS: у тебя даже индекс стрёмный))


так есть констраинт или нет?

что не так с индексом?

ps
лично мне всеравно, просто интересно

....
stax
9 ноя 20, 14:07    [22228745]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax
так есть констраинт или нет?

Твой вариант ответа?

Stax
что не так с индексом?

Дублирующиеся строки сам в табличку вставишь или помощь требуется?))
9 ноя 20, 14:14    [22228755]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode
Stax
так есть констраинт или нет?

Твой вариант ответа?


у меня нет ответа

и да/и нет, парадокс (такой себе котяра, фича)

зы
аж счас заметил
НеофитSQL за что забанили?

.....
stax

Сообщение было отредактировано: 9 ноя 20, 14:18
9 ноя 20, 14:21    [22228759]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax
у меня нет ответа

и да/и нет, парадокс (такой себе котяра, фича)

Не объявлял, значит с точки зрения СУБД его нет.

Stax
НеофитSQL за что забанили?

Не знаю, я не модератор, но подозреваю что за советы из серии очумелые ручки.
9 ноя 20, 14:35    [22228772]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode

Не объявлял, значит с точки зрения СУБД его нет.


SQL> /
insert into test values(1,1)
*
ERROR at line 1:
ORA-00001: unique constraint (STAX.I$TEST$ID) violated 


СУБД говорит violated constraint (нарушен констраинт)

парадокс

.....
stax
9 ноя 20, 14:42    [22228778]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax,

insert into test values(null,'1')

действительно попадокс))

22227509
попадокс продолжается ...
9 ноя 20, 14:46    [22228780]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Stax
СУБД говорит

А документацияотвечает.

When you specify a unique constraint on one or more columns, Oracle implicitly creates an index on the unique key. If you are defining uniqueness for purposes of query performance, then Oracle recommends that you instead create the unique index explicitly using a CREATE UNIQUE INDEX statement. You can also use the CREATE UNIQUE INDEX statement to create a unique function-based index that defines a conditional unique constraint..


упд. Независимо от того function-based или normal индекс определяет явный unique, будет создан одноимённый constraint, если его нет. Уточнение про fbi здесь из-за предшествующего контекста о задании ограничения unique при создании таблицы.

Сообщение было отредактировано: 9 ноя 20, 14:52
9 ноя 20, 14:52    [22228783]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
env,

так есть констраинт у таблички test, или нет?

....
stax
9 ноя 20, 15:14    [22228802]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
env
Независимо от того function-based или normal индекс определяет явный unique, будет создан одноимённый constraint, если его нет.

Хороша трава однако...
create table dropme_t(uniq_idx integer not null);
Table created

create unique index dropme_t$uniq_idx on dropme_t(uniq_idx);
Index created

select index_name, index_type, uniqueness from user_indexes where table_name like 'DROPME_T';
 
INDEX_NAME           INDEX_TYPE       UNIQUENESS
-------------------- ---------------- ----------
DROPME_T$UNIQ_IDX    NORMAL           UNIQUE

select constraint_name, constraint_type, search_condition_vc
  from user_constraints c
 where table_name like 'DROPME_T'
  ;
 
CONSTRAINT_NAME      CONSTRAINT_TYPE  SEARCH_CONDITION_VC
-------------------- ---------------- ----------------------
SYS_C0076508         C                "UNIQ_IDX" IS NOT NULL
 
SQL> 
9 ноя 20, 15:32    [22228816]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Stax
так есть констраинт у таблички test, или нет?

Нет.
9 ноя 20, 15:33    [22228817]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Stax,

Если верить доке, то именно для unique index - есть. ничего не помешает создать одноимённый unique constraint поверх другого индекса.

упд.

andrey_anonymous,

Да, погорячился. Надо было проверить.

упд2.

Тогда получается ошибка в сообщении об ошибке

Сообщение было отредактировано: 9 ноя 20, 15:39
9 ноя 20, 15:40    [22228823]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
andrey_anonymous
Stax
так есть констраинт у таблички test, или нет?

Нет.


а оракля говорит что нарушен констраинт которого нет


ORA-00001: unique constraint (STAX.I$TEST$ID) violated


.....
stax
9 ноя 20, 15:43    [22228827]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Stax
а оракля говорит что нарушен констраинт которого нет

Наябедничал :)
А вот в PL/SQL оно ловится на DUP_VAL_ON_INDEX даже на неуникальном индексе, и что?
В данном случае oracle швыряется ORA-00001 и от индекса, и от констрейнта.

...для эстетов: можно поправить базу сообщений и пусть с днем варенья поздравляет.
Хинт: текст сообщения лежит на клиенте, выводится по коду -1 от facility ORA.

Сообщение было отредактировано: 9 ноя 20, 15:46
9 ноя 20, 15:50    [22228832]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
andrey_anonymous
Stax
а оракля говорит что нарушен констраинт которого нет

Наябедничал :)
А вот в PL/SQL оно ловится на DUP_VAL_ON_INDEX даже на неуникальном индексе, и что?
В данном случае oracle швыряется ORA-00001 и от индекса, и от констрейнта.

...для эстетов: можно поправить базу сообщений и пусть с днем варенья поздравляет.
Хинт: текст сообщения лежит на клиенте, выводится по коду -1 от facility ORA.


раз
1* select * from dba_constraints where table_name='TEST'
SQL> /
no rows selected

то констраинта нет, но сообщение о констраинте

если поменять текст, то он поменяется и в случае нарушения существующего констраинта

и не только на клиенте
SQL> declare
  2   v_err varchar2(32000);
  3  begin
  4   insert into test values(1,1);
  5   insert into test values(1,1);
  6  exception when others then
  7   v_err:=sqlerrm;
  8   dbms_output.put_line(v_err);
  9  end;
 10  /
ORA-00001: unique constraint (STAX.I$TEST$ID) violated

PL/SQL procedure successfully completed.

SQL>



ps
фк хочет именно констраинта (почему-то индекса ему мало)

.....
stax
9 ноя 20, 16:18    [22228848]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Stax
фк хочет именно констраинта (почему-то индекса ему мало)

Вооот, это уже ближе к теме... :)
9 ноя 20, 16:31    [22228861]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
andrey_anonymous
Хинт: текст сообщения лежит на клиенте
Во-первых, клиент не всегда имеет место быть.
Во-вторых, текст сообщения передаётся с сервера. Клиентский файл не играет.
9 ноя 20, 16:47    [22228878]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18398
Elic
andrey_anonymous
Хинт: текст сообщения лежит на клиенте
Во-первых, клиент не всегда имеет место быть.
Во-вторых, текст сообщения передаётся с сервера. Клиентский файл не играет.

1. Клиент есть всегда. Сервер тоже временами клиент.
2. Был неправ, клиентский msb для серверных сообщений не играет.
9 ноя 20, 17:08    [22228899]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
andrey_anonymous
Elic
клиент не всегда имеет место быть.
1. Клиент есть всегда.
Приложения могут подключаться к серверу не используя клиента Oracle.
9 ноя 20, 17:32    [22228920]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax
фк хочет именно констраинта (почему-то индекса ему мало)

Потому что фк относится к миру ограничений целостности, а индекс относится к миру поисковых механизмов, то что технически уникальный индекс накладывает определенные ограничения и частично покрывает функции ограничения уникального ключа, никак не переводит индекс в разряд ограничений целостности.
9 ноя 20, 18:32    [22228966]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode
Stax
фк хочет именно констраинта (почему-то индекса ему мало)

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


ето все понятно (у меня притензий к ФК нет, даж мож и добре что требует констраинта)

повторно
но ORA-00001: говорит о констраинте, которого как бы нет

.....
stax
10 ноя 20, 10:01    [22229352]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Elic
Member

Откуда:
Сообщений: 29991
Stax
повторно
но ORA-00001: говорит о констраинте, которого как бы нет
И что из этого?
10 ноя 20, 10:02    [22229355]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Stax,

Одно сообщение на нарушение уникальности, не стали делать переменную для подстановки index/constraint.
10 ноя 20, 10:04    [22229357]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax,

Ты можешь создать триггер и проверять в нем какие то сложные ограничения бизнес-логики, в случае нарушения кидать исключение, триггер это constraint?
10 ноя 20, 12:39    [22229457]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
graycode
Stax,

Ты можешь создать триггер и проверять в нем какие то сложные ограничения бизнес-логики, в случае нарушения кидать исключение, триггер это constraint?


триггер не констраинт

ps
не знаю как в триггере обеспечить уникальность не блокируя ресурс (аля монопольный режим)

.....
stax
10 ноя 20, 12:46    [22229463]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
env
Stax,

Одно сообщение на нарушение уникальности, не стали делать переменную для подстановки index/constraint.


так я ж очем

не стали и фиг с ними, фича

кстати, если есть констраинт, то сорится именно на него (не на индекс)

.....
stax
10 ноя 20, 12:48    [22229466]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
booby
Member

Откуда:
Сообщений: 2257
graycode
Stax,

Ты можешь создать триггер и проверять в нем какие то сложные ограничения бизнес-логики, в случае нарушения кидать исключение, триггер это constraint?

Нет.
Constraint - это декларативное объявление.
Отсутствующий до сих пор Assert - это constraint, а триггер - нет.
Триггер - это код, реализуемый с помощью sql procedural extension, в рамках той или иной событийной модели.
Это солома которую предлагается использовать в условиях невозможности или сознательного отказа
от реализации логических бизцес-правил декларативным путем.
Конопли не дадим, но вот тебе пенька, делай с ней что хош.

Сообщение было отредактировано: 10 ноя 20, 12:59
10 ноя 20, 13:02    [22229490]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
graycode
Member

Откуда:
Сообщений: 468
Stax
триггер не констраинт

ps
не знаю как в триггере обеспечить уникальность не блокируя ресурс (аля монопольный режим)

.....
stax

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

Когда ты создаешь уникальный индекс, то Oracle вполне вправе предположить, что ты реализуешь какое то свое кастомное ограничение уникальности и генерировать соответствующую ошибку.
10 ноя 20, 14:31    [22229589]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Stax
env,

так есть констраинт у таблички test, или нет?

....
stax


Как сказал Билл Клинтон, "зависит от определения слова constraint".

Я бы сказал что уникальный индекс накладывает на колонку/+и constraint. То, что он активен, но не показывается ожидаемой командой оракла, скорее недосмотр который со временем могут исправить.

Если WiFi не показывается в списке, или \\win\share$ не показан в эксплорере, это не значит что их нет.
12 ноя 20, 06:46    [22230534]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Уточнение: я предположил что индекс невозможно обмануть.

По поводу исполнения constraint в триггере; опытные товарищи отметились что в триггере такое сделать невозможно, не блокируя ресурс.

Почему это так?
12 ноя 20, 06:53    [22230535]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
НеофитSQL

Уточнение: я предположил что индекс невозможно обмануть.

По поводу исполнения constraint в триггере; опытные товарищи отметились что в триггере такое сделать невозможно, не блокируя ресурс.

Почему это так?


попробуйте реализовать в триггере (мож у Вас со свежим взглядом невозможное станет возможным)

ps
обман обману рознь (игноре ров он .... )

.....
stax
12 ноя 20, 09:37    [22230589]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Stax
НеофитSQL

Уточнение: я предположил что индекс невозможно обмануть.

По поводу исполнения constraint в триггере; опытные товарищи отметились что в триггере такое сделать невозможно, не блокируя ресурс.

Почему это так?


попробуйте реализовать в триггере (мож у Вас со свежим взглядом невозможное станет возможным)

ps
обман обману рознь (игноре ров он .... )

.....
stax


Я сделал constraint на колонку id в триггере таблицы test23 таким образом. Для примера - только для вставки.
create or replace trigger tr_test23
  before insert on test23  
  for each row
begin
  insert into test22 (id)
  values (:new.uq);
end tr_test23;


Вроде работает.
SQL> insert into test23 (uq) values(2);
1 row inserted

SQL> insert into test23 (uq) values(2);
insert into test23 (uq) values(2)
ORA-00001: unique constraint (WHOISYOURDADDY.PK__TEST22) violated
ORA-06512: at "WHOISYOURDADDY.TR_TEST23", line 4
ORA-04088: error during execution of trigger 'WHOISYOURDADDY.TR_TEST23'
12 ноя 20, 18:51    [22231046]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL,

Использование юника на соседней таблице в триггере для текущей в контексте этой темы это что-то вроде:
интернеты
- Я прекрасно понимаю семантику вопроса, но полностью игнорирую его суть.
- Вы могли бы привести пример?
- Мог бы.
13 ноя 20, 09:38    [22231241]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
env,

Механика логики триггера в этом вопросе не является принципиальной,
меня интересовало мнение Stax (и других), почему constraint уникальности невозможно реализовать в триггере, хотя другие (построчные) вполне можно.

Я мог бы триггер написать и без использования constraint других таблиц, если это важно.
13 ноя 20, 17:32    [22231593]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
НеофитSQL
если это важно.


важно

.....
stax
13 ноя 20, 17:39    [22231602]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
НеофитSQL
Я мог бы триггер написать и без использования constraint других таблиц, если это важно.

Важно. Сделайте реализацию ограничения уникальности на одной таблице триггером для этой таблицы, без использования unique index/constraint на любой таблице.
13 ноя 20, 17:47    [22231611]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Stax
НеофитSQL
если это важно.


важно

.....
stax


Сегодня попробую.
Т.е. речь шла о трудности реализации уникальности значений в таблице не полагаясь на существующие механизмы для этой цели.
13 ноя 20, 18:19    [22231632]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
НеофитSQL
dmdmdm
пропущено...


Как только напишете тул, который учитывает все варианты, которые может ввести прокладка между монитором и стулом - приходите, поговорим про косяки.


Легко: echo.exe

Не уверен, что вы хотели сказать.


1. Т.е. echo.exe равнозначно plsqldev.exe. Принято.

2. "Не понимаете" - читай, "изображаете непонимание", когда то, что сказали, неудобно вам.

3. С первого вашего появления на форуме и далее неизменно, конструктивную критику вы игнорируете, а свое эго - в том числе и в областях, малознакомых вам, выпячиваете. Правильным путем идете, товарищ.
13 ноя 20, 19:01    [22231659]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
dmdmdm

1. Т.е. echo.exe равнозначно plsqldev.exe. Принято.

2. "Не понимаете" - читай, "изображаете непонимание", когда то, что сказали, неудобно вам.

3. С первого вашего появления на форуме и далее неизменно, конструктивную критику вы игнорируете, а свое эго - в том числе и в областях, малознакомых вам, выпячиваете. Правильным путем идете, товарищ.


Это называется "передвигать ворота". Работает с гуманитариями, реже - с программистами.
Сформулируйте свою мысль более конкретно, получите более полезный ответ.
13 ноя 20, 19:11    [22231665]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
НеофитSQL
получите более полезный ответ.


Мне нужен ответ от вас? Браво.
13 ноя 20, 19:13    [22231667]     Ответить | Цитировать Сообщить модератору
 Re: глюк Pl-sql developer'а  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Обсуждение реализации уникальности в колонке перенесено сюда. 22231730
14 ноя 20, 05:11    [22231889]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / Oracle Ответить