Announcement

Collapse
No announcement yet.

Oracle Anfänge

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle Anfänge

    moin

    hab nach jahren der nichtbenutzung nun wieder mit oracle angefangen ...
    aber irgendwie versteh ich da n bissi was nicht ...

    also hab folgendes gemacht:
    eine tabelle erstellt name: Test
    mit 2 spalten : ID und Name
    ID ist als primary Key und NOT NULL deklariert
    Name ist ein Varchar2 mit ner länge von 255 zeichen

    nun wollt ich nen insert machen und das feld name einfach mal füllen und das feld id sollte per autoincrement hochgezählt werden ...

    und bei dem letzteren (autoincrement) hab ich nun mein problem ...
    ich hab festgestellt das man ne sequenz und nen trigger schreiben muss um das zu realisieren ... das ist naja sagen wir mal umständlich aber ok ... ich hab also n bissi gegooglet und folgendes gefunden :

    sequenz:

    create sequence test_seq
    start with 1
    increment by 1
    nomaxvalue;

    trigger:

    create trigger test_trigger
    before insert on test
    for each row
    begin
    select test_seq.nextval into :new.id from dual;
    end;
    /

    ^^ hier hatte ich mein erstes problem ... es kam immer die fehlermeldung:
    Fehlender IN- oder OUT-Parameter auf Index:: 1

    nachdem ich den : in zeile 5 des triggers weg genommen hatte ging das aber nun bekomm ich beim insert das wie folgt aussieht:
    insert into test (id, NAME) values (test_seq.nextval, 'das ist ein test' );

    immer die fehlermeldung:
    ORA-04098: Trigger 'SYSTEM.TEST_TRIGGER' ist ungültig und konnte nicht neu bestätigt werden

    so und nu bin ich etwas überfragt ...
    kann mir wer helfen ???

    thx LT

  • #2
    ID ist als primary Key und NOT NULL deklariert
    Ein PK ist implizit bereits NOT NULL (und Unique).

    es kam immer die fehlermeldung:
    Fehlender IN- oder OUT-Parameter auf Index:: 1
    Wo? Beim Übersetzen des Triggers oder beim Insert?

    insert into test (id, NAME) values (test_seq.nextval, 'das ist ein test' );
    Wieso gibst Du die ID an wenn Du sie automatisch füllen möchtest? Dann kannst dir den Trigger auch sparen und die Spalte direkt mit dem Wert der Sequence füllen.

    ORA-04098: Trigger 'SYSTEM.TEST_TRIGGER' ist ungültig und konnte nicht neu bestätigt werden
    System ist ein administrativer User. Du solltest dir einen normalen user anlegen, ansonsten kannst deine Instance auch mal eben so aus versehen ein bissl "kaputt" machen

    Comment


    • #3
      Originally posted by TomT View Post
      Wo? Beim Übersetzen des Triggers oder beim Insert?
      zeile 5 des triggers

      Originally posted by TomT View Post
      Wieso gibst Du die ID an wenn Du sie automatisch füllen möchtest? Dann kannst dir den Trigger auch sparen und die Spalte direkt mit dem Wert der Sequence füllen.
      wie dann ????

      Originally posted by TomT View Post
      System ist ein administrativer User. Du solltest dir einen normalen user anlegen, ansonsten kannst deine Instance auch mal eben so aus versehen ein bissl "kaputt" machen
      jojo is ok werd ich demnächst mal machen war im mom auch eher nen test

      Comment


      • #4
        zeile 5 des triggers
        Kann ich nicht nachvollziehen. Der Tigger ist ok, lässt sich hier auch komplilieren und macht was er machen soll.

        wie dann ????
        Entweder du hast einen Trigger der dir die Spalte füllt, dann schreibst Du den Insert so:
        Code:
        insert into test (col1,col2) values('wert1','wert2');
        Ohne Trigger machst Du es so:
        Code:
        insert into test (id,col1,col2) values(seq_test.nextval,'wert1','wert2');

        Comment


        • #5
          jo ich habs ohne trigger gemacht ... geht jetzt soweit thx ...

          Comment

          Working...
          X