pomoc z triggerem

0

Witam

Mam taki problem
Muszę stworzyć tabelę o trzech polach numerycznych takich, że:

  • dwie pierwsze kolumny stanowią klucz podstawowy
  • wartość trzeciej kolumny nie może być mniejsza niż suma pierwszych dwóch

a do tej tabeli stworzyć trigger, który powoduje automatyczne wstawienie dwóch pierwszych kolumn tak, aby pierwsza przyjmowała kolejne wartości począwszy od 1, natomiast druga przyjmowała cyklicznie wartość od 1 do 9 oraz gdy nie podano wartości trzeciej kolumny wstawiała do niej najmniejszą dopuszczalną wartość

CREATE TABLE tabela1
( 
kolumna1 number(3),
kolumna2 number(3),
kolumna3 number(3),
CONSTRAINT pk PRIMARY KEY(kolumna1 , kolumna2 ),
CONSTRAINT spr CHECK ((kolumna1 +kolumna2 )<=kolumna3 )
);

CREATE OR REPLACE TRIGGER tr1
BEFORE INSERT ON tabela1
FOR EACH ROW
BEGIN
....



END;

nie bardzo wiem jak to ugryźć dalej , bardzo proszę o pomoc, jakąś podpowiedź

Z góry dziękuję

0
kalchas napisał(a)

pierwsza przyjmowała kolejne wartości począwszy od 1, natomiast druga przyjmowała cyklicznie wartość od 1 do 9

Czy to znaczy, żekolejne wartości mają być np. takie
1-1
2-2
3-3
....
9-9
10-1
11-2
12-3
....
itd.

czy też:

1-1
1-2
1-3
......
1-9
2-1
2-2
2-3
....
itd. ?

Do czego jest potrzebne takie wymaganie ?

0

Musisz zrobić dwie sekwencje, z czego jedna musi być cykliczna:


CREATE SEQUENCE sq1
 MINVALUE  0
 MAXVALUE  9
 cache 9
 cycle
/

--wczytanie wartości
select sq1.NEXTVAL from dual

Druga standardowa.

W trigerze pobierasz wartości z sekwencji najpierw z sekwencji cyklicznej (nextval-em), jeśli jest zero przekręcasz drugą sekwencję (nextval), jeśli nie to nie przekręcasz(currval).

Jak pisać triggery to sobie poczytaj. Chyba, że masz konkretne pytania.

0

currval musi zostać najpierw zainicjowane w danej sesji inaczej rzuci błędem

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