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

Gast #1149983
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.