powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не создаётся первичный ключ
25 сообщений из 51, страница 1 из 3
Не создаётся первичный ключ
    #39475266
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем!
Я создал таблицу, в ней есть поле ID(no null). Есть ещё триггер для автоинкремента:
if (new.id is null) then
new.id = gen_id(GEN_MAPPING_TMP_ID,1);
Но создать по полю ID первичный ключ не получается - выскакивает ошибка:
The insert failed because a column definition includes validation constraints.
validation error for column ID, value "*** null ***".
В чём дело?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475269
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек, триггер BEFORE INSERT?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475272
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДжекВ чём дело?
Код триггера (полностью DDL)?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475276
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот триггер:
CREATE OR ALTER TRIGGER MAPPING_TMP_BI FOR MAPPING_TMP
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id(GEN_MAPPING_TMP_ID,1);
end
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475278
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек,

значит посылаешь id не null. Запрос на Insert в студию.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475279
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI Запрос на Insert в студию.
Какой запрос? Я первичный ключ не могу создать.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475282
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДжекKreatorXXI Запрос на Insert в студию.
Какой запрос? Я первичный ключ не могу создать.
А в таблице уже есть значения? А если сделать select * from table where id is null ?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475283
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек,

значит в этой таблице уже есть данные. Причём в id где-то присутствует null
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475286
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис значит в этой таблице уже есть данные. Причём в id где-то присутствует null
Сначала были данные, но без null (легко проверить - их мало) - не получалось.
Очистил таблицу - результат тот же.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475288
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек,

Запутал всех. Причём здесь тогда триггер?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475289
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек,

DDL таблицы в студию и скрипт создания первичного ключа тоже
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475296
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE GENERATOR GEN_MAPPING_TMP_ID;

CREATE TABLE MAPPING_TMP (
NAME VARCHAR(63),
SHEET VARCHAR(34),
NAME5P VARCHAR(67),
SHEET5P VARCHAR(36),
ID P_KEY NOT NULL /* P_KEY = INTEGER NOT NULL */
);

Почему-то в ddl таблице ещё создание генератора записалось? Может из-за этого...
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475308
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек, скрипт ПК где?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475312
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALTER TABLE MAPPING_TMP ADD CONSTRAINT PK_MAPPING_TMP PRIMARY KEY (ID);
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475316
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
This operation is not defined for system tables.
Dynamic SQL Error.
SQL error code = -607.
Invalid command.
Specified domain or source column P_KEY does not exist.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475322
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очевидно, вам сначала надо создать домен P_KEY...
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475348
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Что я не так делаю?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475359
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarЧто я не так делаю?

Кодировка подключения правильная?
И по идее, это должна быть новая тема?
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475365
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarЧто я не так делаю?

Позволяешь серверу собрать мусор в таблице перед созданием ключа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475385
Джек
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас сделал таблицу с первичным ключом из скрипта - получилось.
Раньше таблица была создана автоматически, при импорте данных.
Вопрос снимается.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475446
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksКодировка подключения правильная?
И по идее, это должна быть новая тема?
Это random. Вопрос к ТС - почему у меня работает, а у него нет.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475462
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarВопрос к ТС - почему у меня работает, а у него нет.Все тебе разжевать надо? ПК-ФК стоят над транзакциями, судя по всему есть незакрытые коннекты, которые заинтересованы в старых версиях записей, которые (версии, уже удаленные/исправленные данные) не дают создаться ключу. Не просто так рекомендация есть: изменяй метаданные монопольно.
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39475611
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyGallemarВопрос к ТС - почему у меня работает, а у него нет.Все тебе разжевать надо?
Вопрос риторический :)
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39476341
Фотография alex_p_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джек,

Я обычно деляю так (для любой таблицы):

CREATE GENERATOR MyTable_GEN_ID;

CREATE OR ALTER TRIGGER MyTable_BI0 FOR MyTable
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable CurrentCode integer;
begin
if ((NEW.MyTable_ID is NULL) or (NEW.MyTable_ID<=0)) then
NEW.MyTable_ID = GEN_ID(MyTable_GEN_ID,1);
else begin
CurrentCode = GEN_ID(MyTable_GEN_ID,0);
if (CurrentCode<NEW.MyTable_ID) then
CurrentCode = GEN_ID(MyTable_GEN_ID,NEW.MyTable_ID-CurrentCode);
end
end
...
Рейтинг: 0 / 0
Не создаётся первичный ключ
    #39476353
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кошмар. А уж в конкурентной среде будет "аццкий адъ".

Если тебе надо застолбить несколько id-ов, так и скажи генератору gen_id(генератор, требуемое_кол_во).
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не создаётся первичный ключ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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