Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Автоинкрементальные поля и Interbase 2

Delphi , Базы данных , Interbase

Автоинкрементальные поля и Interbase 2

Автор: Steve Koterski (Borland)

Я пытаюсь сгенерировать последовательный ключ для первичной ключевой колонки, но LIBS мне отвечает "nested select is not support in this context." (вложенный выбор не поддерживается в данном контексте.)

Как насчет:


  CREATE TRIGGER AUTOINCREMENT FOR MYTABLE
  BEFORE INSERT AS
  DECLARE VARIABLE new_key INTEGER;
  BEGIN
    UPDATE AUTOKEYS
      SET KEY_VALUE = KEY_VALUE + 1
      WHERE (KEY_ID = "A");
    SELECT KEY_VALUE
      FROM AUTOKEYS
      WHERE KEY_ID = "A"
      INTO :new_key;
    new.my_key_column = new_key;
  END ^

Here's the translation of the content into Russian:

Классическая проблема использования заявленного SELECT-запроса в триггере InterBase!

В InterBase нельзя использовать SELECT-запрос внутри триггера, который обновляет ту же таблицу. Это потому, что триггеры выполняются как единое, атомарное действие, и InterBase не позволяет использовать заявленные selects.

Однако есть способ достичь вашей цели без использования заявленного SELECT. Вы можете обновить таблицу AUTOKEYS в триггере BEFORE INSERT и затем присвоить новый значение столбцу my_key_column вставленной строки. Вот альтернативное решение:

CREATE TRIGGER AUTOINCREMENT FOR MYTABLE
BEFORE INSERT AS
DECLARE VARIABLE new_key INTEGER;
BEGIN
  UPDATE AUTOKEYS
    SET KEY_VALUE = KEY_VALUE + 1
    WHERE (KEY_ID = "A");

  SELECT KEY_VALUE FROM AUTOKEYS WHERE KEY_ID = "A" INTO :new_key;

  NEW.my_key_column := :new_key;
END ^

В этом альтернативном решении мы обновляем таблицу AUTOKEYS, чтобы увеличить значение ключа, и затем присваиваем новое значение переменной :new_key. Мы можем использовать эту переменную для установки значения столбца my_key_column вставленной строки.

Обратите внимание, что я использовал ключевое слово NEW для ссылки на столбцы вставленной строки. Это стандартная синтаксис InterBase для триггеров.

Надеюсь, это поможет! Пожалуйста, не стесняйтесь задавать вопросы, если у вас есть дополнительные вопросы.

Автоинкрементальные поля и Interbase 2: при попытке создать триггер для генерации последовательного ключа возникает ошибка "nested select is not support in this context", связанная с ограничениями языка SQL в Interbase 2.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Interbase ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:03:43/0.0054409503936768/1