автоматическое увеличение номера записи для каждой вставки в таблицу записей - PullRequest
2 голосов
/ 04 декабря 2011

Я пытался использовать этот код:

CREATE OR REPLACE FUNCTION eno_inc() RETURNS trigger AS $eno_inc$

BEGIN

NEW.eno := OLD.eno + 1;

END;
$eno_inc$
LANGUAGE plpgsql;

, но каждый раз, когда я запускаю, он генерирует эту ошибку: ОШИБКА: запись "старая" еще не назначена ПОДРОБНАЯ ИНФОРМАЦИЯ: Структура кортежа еще не назначенной записиявляется неопределенным.КОНТЕКСТ: PL / pgSQL функция "eno_inc" строка 4 при назначении

*** Ошибка ***

ОШИБКА: запись "старая" еще не назначена Состояние SQL: 55000

PS Я очень плохо знаком с SQL

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

В дополнение к тому, что @DrColossos уже написал ..

OLD и NEW определены только в триггере ON UPDATE.В триггере на INSERT вы получите это сообщение об ошибке.В триггере на DELETE в вашем распоряжении только OLD.

Кроме того, для срабатывания триггера вам нужна функция триггера плюс триггер .Возможно, вам тоже не хватает этого.Начните с , прочитав отличное руководство здесь .

Но я подозреваю, что ваши проблемы более фундаментальны, чем эта.Прежде всего, как прокомментировал @Steve, вы, вероятно, просто ищете столбец serial или sequence и DEFAULT для уже существующего столбца.

1 голос
/ 04 декабря 2011

Вам не хватает

RETURN NEW;

в конце.

Ошибка

ERROR: record "old" is not assigned yet SQL state: 55000

действительно показывает, что MIGHT не может бытьтриггер (OLD и NEW используются только в контексте триггера).Вам нужно определить триггер, чтобы это работало.Я предлагаю вам прочитать документы о функциях триггера .

. Как отмечает Стив С, убедитесь, что вам не нужен SERIAL (автоинкремент)в терминах MySQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...