flowerpower
Mitglied
Habe eine Tabelle Warenkorb (nur eine Übung für mich). Sinn ist es Sequencen (in Verbindung mit und ohne Triggern) zu verstehen.
Warenkorb:
ARTIKEL_ID NOT NULL NUMBER
ARTIKEL VARCHAR2(30)
ABTEILUNG VARCHAR2(30)
ANZAHL NUMBER
Sequence:
create sequence Warenkorb_Trigger_Seq start with 1 minvalue 1 maxvalue 20 increment by 1 nocycle order;
Dafür habe ich einen Trigger erstellt:
CREATE OR REPLACE
TRIGGER WARENKORB_TRIGGER_SEQ BEFORE INSERT ON WARENKORB
FOR EACH ROW
BEGIN
if :new.anzahl is null
then
SELECT sequence1.NEXTVAL INTO :NEW.anzahl FROM DUAL;
end if;
END;
bei eingeschaltetem Trigger:
insert into warenkorb values (44, 'fritz3', 'Video', null);
Funktioniert auch: die Sequence wird hochgezählt und eingetragen.
bei ausgeschaltetem Trigger, dachte ich mir, sollte es auch funktionieren, indem ich einfach den nächsten Wert der Sequence anspreche.
insert into warenkorb values (45, 'fritz4', 'Video', sequence1.nextval);
Das funktioniert jedoch nicht, mir wird hier ein null-Wert eingetragen.
Ist der Eintrag via sequence-Name.nextval nicht möglich, muss man das über Trigger realisieren?
Sequencen müssen doch nicht bei 1 beginnen und können beliebig ganzzahlig hochgezählt werden, oder? Zählen Sequencen eigentlich auch rückwärts, mir fällt spontan nichts Sinnvolles ein, wo man das brauchen könnte, aber man weiss ja nie.
Was heisst bei der Sequence-Erstellung 'order' (werden nicht diese generell incrementiert auf den nächsten Wert ausgegeben)?
Danke vorab für die Hilfe.
Grüsse. flowerpower
Update: mir ist gerade etwas aufgefallen, wenn ich den nextval als to_number caste (also der Typ der Spalte in der Tabelle), dann trägt er diesen auch in die Tabelle ein.
insert into warenkorb values (315, 'Milch1', 'Lebensmittel', to_number(sequence1.nextval));
Ist es etwa so, dass der nextval einer Sequence ein Character ist? Ich dachte, dass sei für SQL ein Number?
Warenkorb:
ARTIKEL_ID NOT NULL NUMBER
ARTIKEL VARCHAR2(30)
ABTEILUNG VARCHAR2(30)
ANZAHL NUMBER
Sequence:
create sequence Warenkorb_Trigger_Seq start with 1 minvalue 1 maxvalue 20 increment by 1 nocycle order;
Dafür habe ich einen Trigger erstellt:
CREATE OR REPLACE
TRIGGER WARENKORB_TRIGGER_SEQ BEFORE INSERT ON WARENKORB
FOR EACH ROW
BEGIN
if :new.anzahl is null
then
SELECT sequence1.NEXTVAL INTO :NEW.anzahl FROM DUAL;
end if;
END;
bei eingeschaltetem Trigger:
insert into warenkorb values (44, 'fritz3', 'Video', null);
Funktioniert auch: die Sequence wird hochgezählt und eingetragen.
bei ausgeschaltetem Trigger, dachte ich mir, sollte es auch funktionieren, indem ich einfach den nächsten Wert der Sequence anspreche.
insert into warenkorb values (45, 'fritz4', 'Video', sequence1.nextval);
Das funktioniert jedoch nicht, mir wird hier ein null-Wert eingetragen.
Ist der Eintrag via sequence-Name.nextval nicht möglich, muss man das über Trigger realisieren?
Sequencen müssen doch nicht bei 1 beginnen und können beliebig ganzzahlig hochgezählt werden, oder? Zählen Sequencen eigentlich auch rückwärts, mir fällt spontan nichts Sinnvolles ein, wo man das brauchen könnte, aber man weiss ja nie.
Was heisst bei der Sequence-Erstellung 'order' (werden nicht diese generell incrementiert auf den nächsten Wert ausgegeben)?
Danke vorab für die Hilfe.
Grüsse. flowerpower
Update: mir ist gerade etwas aufgefallen, wenn ich den nextval als to_number caste (also der Typ der Spalte in der Tabelle), dann trägt er diesen auch in die Tabelle ein.
insert into warenkorb values (315, 'Milch1', 'Lebensmittel', to_number(sequence1.nextval));
Ist es etwa so, dass der nextval einer Sequence ein Character ist? Ich dachte, dass sei für SQL ein Number?
Zuletzt bearbeitet: