www.mikrocontroller.net

Forum: PC-Programmierung PL/SQL mit oracle 10g: Trigger erstellen, tabelle bei gleichheit eines Strings füllen


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

fange grad an PL/SQL zu Programmieren und versuche mich an folgendem 
Beispiel:

Ich will einen Rechnerkonfigurator "bauen".
Es gibt zunächst ne Tabelle Mainboard und eine Tabelle CPU, beide haben 
ein Feld Sockel.
beim einfügen eines neuen CPUs soll ein Trigger ausgelöst werden, der 
prüft ob der CPU sozusagen auf irgendwelche Boards passt. wenn dem so 
ist, soll ein Eintrag in die Koppeltabelle cpu_mainboard geschrieben 
werden.
Der Datentyp des Feldes Sockel ist varchar2. Und ich denke auch dass da 
der Fehler liegt.(siehe Fehlerbeschreibung unten)

Ich habe versucht einen Beispielcode abzuwandeln, mein Ergebnis seht ihr 
hier:

Ich bedanke mich schon jetzt für eure Hilfe!

create or replace trigger new_cpu
after insert on cpu 
for each row

declare 
  socketneu varchar2(5):= 0;
  ma_bez:=0;    
  cursor cs is select * from mainboard where socket = :new.socket;
  cs_rec cs%rowtype;
begin
  socketneu:= :new.socket;
  open cs;
  loop 
  fetch cs into cs_rec;
    exit when cs%notfound;
    ma_bez:=cs_rec.bezeichner_ma;
      insert into cpu_mainboard VALUES(:new.bezeichnung_cpu,ma_bez);
  end loop;  
  close cs;
end new_cpu;
.
run;

dabei bekomme ich folgende Fehlermeldung:
Fehler bei TRIGGER NEW_CPU:

LINE/COL ERROR
-------- -----------------------------------------------------------------
3/8      PLS-00103: Encountered the symbol "=" when expecting one of the
         following:
         constant exception <an identifier>
         <a double-quoted delimited-identifier> table LONG_ double ref
         char time timestamp interval date binary national character
         nchar
         The symbol "<an identifier>" was substituted for "=" to continue.

Autor: flk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Fehler liegt hier:
declare 
  socketneu varchar2(5):= 0;
  ma_bez:=0;    

zumindestens socketneu ist eine Character-Variable und sollte entweder 
mit NULL oder mit "0" initialisiert werden.

Gruß
flk

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
erstmal vielen Dank für die Schnelle Antwort,
klingt ja auch alles plausibel, bei meinem Beispiel wars halt ne number, 
deswegen die 0...

Habs jetzt mal sowohl mit NULL als auch mit "0" versucht, aber die 
Fehlermeldung bleibt exakt die gleiche...

gruß, Jan!

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab nochmal weiter herumexperimentiert und versucht die Strings zu 
eliminieren.
DIe Tabellen CPU und mainboard sind nun über eine fortlaufende, 
automatisch generierte Nummer gekoppelt.(seq_cpu,seq_mainboard)
Der Datentyp des Feldes Sockel ist varchar2.

Neue Fehlermeldung steht unten. Vielleicht kann mir jetzt jemand helfen.

Gruß, Jan

CREATE OR REPLACE TRIGGER new_cpu
BEFORE INSERT ON cpu
FOR EACH ROW
DECLARE
  cursor cs is select sequenz_mainboard from mainboard where socket = :NEW.SOCKET;
        cs_rec cs%rowtype;
begin
  open cs;
  loop fetch cs into cs_rec; 
  exit when cs%notfound; 
  insert into cpu_mainboard VALUES(:new.sequenz_cpu,cs_rec);
  end loop;  
  close cs;
end new_cpu;
.
run;
Als Fehlermeldung bekomme ich folgendes:

Fehler bei TRIGGER NEW_CPU:

LINE/COL ERROR
-------- ---------------------------------------
6/102    PLS-00382: expression is of wrong type

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.