Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование последовательности в триггере 
:(
    Опции темы
persalena
Дата 11.12.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.12.2008

Репутация: нет
Всего: нет



Здравствуйте! 

Я пытаюсь написать триггер, который будет генерировать идентификаторы для таблицы. Мне нужен именно триггер. Про то, что можно это сделать с помощью default, я знаю. Так вот, таблица у меня выглядит следующим образом:

Код

Create TABLE medicine
(
id_med smallint PRIMARY KEY,
id_type smallint NOT NULL,
id_form smallint NOT NULL,
name character(100) NOT NULL UNIQUE,
critcol integer NOT NULL
);


вот внешние ключи (если мало ли они как-то окажутся причастны..)

Код

ALTER TABLE medicine
ADD CONSTRAINT con1 FOREIGN KEY (id_type)
REFERENCES medtype (id_medtype)
ON DELETE CASCADE
ON UPDATE CASCADE;
ALTER TABLE medicine
ADD CONSTRAINT con2 FOREIGN KEY (id_form)
REFERENCES medform (id_medform)
ON DELETE CASCADE
ON UPDATE CASCADE;


Пишу последовательность:

Код

create sequence seq_1 increment by 1 start with 1;


Пишу триггер:

Код

create function func1() returns trigger as'
begin
NEW.id_med = nextval("seq_1");
return NEW;
end
'language plpgsql;

CREATE TRIGGER tr1
BEFORE INSERT ON medicine FOR EACH ROW
EXECUTE PROCEDURE func1();


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

ERROR:  column "seq_1" does not exist
LINE 1: SELECT  nextval("seq_1")
                        ^
QUERY:  SELECT  nextval("seq_1")
CONTEXT:  PL/pgSQL function "func1" line 2 at assignment

Подскажите пожалуйста, что не так и как это исправить.
PM MAIL   Вверх
LSD
Дата 12.12.2011, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 538



Попробуй так:
Код

create function func1() returns trigger as $$
begin
  NEW.id_med = nextval('seq_1');
  return NEW;
end
$$ language plpgsql;



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.