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

Gast #1149983
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!
1
create or replace trigger new_cpu
2
after insert on cpu 
3
for each row
4

5
declare 
6
  socketneu varchar2(5):= 0;
7
  ma_bez:=0;    
8
  cursor cs is select * from mainboard where socket = :new.socket;
9
  cs_rec cs%rowtype;
10
begin
11
  socketneu:= :new.socket;
12
  open cs;
13
  loop 
14
  fetch cs into cs_rec;
15
    exit when cs%notfound;
16
    ma_bez:=cs_rec.bezeichner_ma;
17
      insert into cpu_mainboard VALUES(:new.bezeichnung_cpu,ma_bez);
18
  end loop;  
19
  close cs;
20
end new_cpu;
21
.
22
run;

dabei bekomme ich folgende Fehlermeldung:
1
Fehler bei TRIGGER NEW_CPU:
2

3
LINE/COL ERROR
4
-------- -----------------------------------------------------------------
5
3/8      PLS-00103: Encountered the symbol "=" when expecting one of the
6
         following:
7
         constant exception <an identifier>
8
         <a double-quoted delimited-identifier> table LONG_ double ref
9
         char time timestamp interval date binary national character
10
         nchar
11
         The symbol "<an identifier>" was substituted for "=" to continue.
Gast #1149987
Lesenswert?
• ▲
▼
Hallo,

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

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

Gruß
flk
Gast #1150021
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!
Gast #1150937
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
1
CREATE OR REPLACE TRIGGER new_cpu
2
BEFORE INSERT ON cpu
3
FOR EACH ROW
4
DECLARE
5
  cursor cs is select sequenz_mainboard from mainboard where socket = :NEW.SOCKET;
6
        cs_rec cs%rowtype;
7
begin
8
  open cs;
9
  loop fetch cs into cs_rec; 
10
  exit when cs%notfound; 
11
  insert into cpu_mainboard VALUES(:new.sequenz_cpu,cs_rec);
12
  end loop;  
13
  close cs;
14
end new_cpu;
15
.
16
run;
Als Fehlermeldung bekomme ich folgendes:
1
Fehler bei TRIGGER NEW_CPU:
2

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.