Nowa kolumna w tabeli

0

(sql/firebird)
Witam,
Mam dodac do istniejacej tabeli nową kolumne "wartosc_id", i uzupelnic ja liczbami od 1 dla kazdego istniejącego wiersza

moj kod wyglada tak:

--stworzenie generatora 
CREATE SEQUENCE GEN_licz_ID;
ALTER SEQUENCE GEN_licz_ID RESTART WITH 1;

 --stworzenie nowego pola wartosc_id 
ALTER TABLE tabela_1
ADD wartosc_id INTEGER NOT NULL;

set term !!;
create TRIGGER auto_nr for tabela_1
active before update
as
begin
if (new.wartosc_id is null)
then new.wartosc_id=GEN_id(GEN_licz_ID,1);
end !!
SET TERM; !!


skrypt sie wykonuje, dodaje generator, kolumne do tabeli, ale jej nie uzupelnia :/ coś jest nie tak

prosze o pomoc

1

Trigger wykonuje się przed daną akcją - akcji brak - brak wywołania triggera. Napisz procedurę, która wywoła update dla każdego wiersza i ją odpal po dodaniu kolumny. Trigger w takim wypadku byłby niepotrzebny, chyba że chcesz aby nowe rekordy były obsługiwane przez trigger to wtedy zmień go na befor insert.

0

zrobilem tak jak napisales, dodalem update-a.
Nastepnie chce dodac dla tej kolumny klucz podstawowy.
Gdy uruchamiam skrypt bez fragmentu "dodanie klucza podstawowego" wszystko dziala ok-tworzy kolumne i wypelnia ją liczbami,
ale gdy uruchomie wraz z fragmentem "dodaniem klucza.." to tworzy kolumne ale nie wypelnia kolumny liczbami i wyrzuca błąd:

The insert failed because a column definition includes validation constraints. validation error for column STYPENDIUM_PRZYZNANE_ID, value "*** null ***".

--stworzenie generatora 
CREATE SEQUENCE GEN_licz_ID;
ALTER SEQUENCE GEN_licz_ID RESTART WITH 1;
 
 --stworzenie nowego pola wartosc_id 
ALTER TABLE tabela_1
ADD wartosc_id INTEGER NOT NULL;

--aktualizacja kolumny
update tabela_1
set
wartosc_id=next value for gen_licz_id;

--dodanie klucza podstawowego
ALTER TABLE tabela_1
ADD CONSTRAINT pk_wartosc_id PRIMARY KEY (wartosc_id);
1

Komunikat każe sądzić że coś jest z kolumną STYPENDIUM_PRZYZNANE_ID. Wygląda że jest constraint i nie jest spełniony. Może Alter dla wartosc_id odpala sprawdzenie innych constrant i tu jest problem?

0

tam w tresci błedu mam byc zamiast "stypendium_przyznane_id" - "wartosc_id", swoj przyklad przelozylem na mniej skomplikowane i krotsze nazwy, i zapomnialem zmienic tej nazwy w błędzie

hmm.. inne kolumny w tabela_1 mają constraint :/

0

Ten skrypt jest odpalany w transakcji? Niektóre operacje na samych tabelach nie mogą być wykonywane w jednej transakcji - może to jeden z tych przypadków.

0

nie wiem czy o to pytasz, pracuje w IBexpert-cie i odpalam skrypt w Wyzwalaczu skryptu

Doprowadzilem to do takiej postaci ze dziala prawidlowo(dodaje kolumne,uzupelnia ją i nadaje jej klucz podstawowy) , dodalem trigggera przed dodaniem klucza podstawowego.

--stworzenie generatora 
CREATE SEQUENCE GEN_licz_ID;
ALTER SEQUENCE GEN_licz_ID RESTART WITH 1;
 
 --stworzenie nowego pola wartosc_id 
ALTER TABLE tabela_1
ADD wartosc_id INTEGER NOT NULL;
 
--aktualizacja kolumny
UPDATE tabela_1
SET
wartosc_id=NEXT VALUE FOR gen_licz_id;

--definicja triggera
SET term !!;
CREATE TRIGGER auto_nr FOR tabela_1
active BEFORE UPDATE
AS
BEGIN
IF (NEW.wartosc_id IS NULL)
THEN NEW.wartosc_id=GEN_id(GEN_licz_ID,1);
END !!
SET TERM; !!
 
--dodanie klucza podstawowego
ALTER TABLE tabela_1
ADD CONSTRAINT pk_wartosc_id PRIMARY KEY (wartosc_id);

Gdy uruchamiałem Bez triggera nie dzialało, gdy dawalem dodanie klucza podstawowego przed trigera również nie dzialało, nie wiem czemu, dlaczego sie tak dzialo ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1