Sam: update anweisung, wie geht es richtig???

Hallo community,
ich arbeite gerade an einer Datenbank für eine Schulaufgabe.
Ich will in einer stored Procedure den Versuch der Person mit der pid=20175 für die Pruefung mit der pruefungID=8 um einen erhöhen.
Soll natürlich für alle gehen. Aber erstmal würde mir einer reichen.

  
UPDATE dba.Anmeldung  
        SET versuch = versuch+1  
        WHERE pid = 20175  
	AND modulID = (SELECT modulID FROM Pruefung WHERE PruefungID=8);  

Diese Updateanweisung funktioniert nicht mit der Fehlermeldung 'Spalte versuch nicht gefunden'
das Komische ist aber dieses Select-Statement auf der gleichen Datenbank funktioniert~~~sql

select versuch from anmeldung
  WHERE pid = 20175
  AND modulID = (SELECT modulID FROM Pruefung WHERE PruefungID=8);

Ich kann mir dieses Phänomen nicht erklären, einer von euch vielleicht?  
Die Tabelle sieht so aus  
~~~sql
  
/*==============================================================*/  
/* Table: Anmeldung                                             */  
/*==============================================================*/  
create table Anmeldung  
(  
   modulID              char(8)                        not null,  
   pid                  integer                        not null,  
   anmeldestatus        smallint,  
   Versuch              int,  
   constraint PK_ANMELDUNG primary key clustered (modulID, pid)  
);  

Ich arbeite mit einer Sybase SqlAnywhere11 Datenbank, und habe als dba und/oder dbuser das gleiche Resultat.

Wäre cool, wenn einer von euch ne Antwort weiß.
mfg Sam

  1. Hi,

    UPDATE dba.Anmeldung
    select versuch from anmeldung

    Sprichst du damit auch wirklich beide Male die gleiche Tabelle an?
    (K.A., wie das bei deinem DBMS hinsichtlich case sensitivity von Bezeichnern aussieht.)

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Vielleicht müsste es ja dbo statt dba heißen? Das kenn ich als "database owner".

      (Übrigens, warum krieg ich bei nur obigem Satz die Meldung: Der Text enthält drei oder mehr gleiche Zeichen hintereinander oder enthält keine Satzzeichen (-2.00 Punkte).)

      1. Hi Encoder!

        (Übrigens, warum krieg ich bei nur obigem Satz die Meldung: Der Text enthält drei oder mehr gleiche Zeichen hintereinander oder enthält keine Satzzeichen (-2.00 Punkte).)

        Weil du den Titel des Vorgängerpostings blind übernommen hast.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. ups, der Titel zählt ja auch dazu :-)

      2. Vielleicht müsste es ja dbo statt dba heißen? Das kenn ich als "database owner".

        Ok ich werde mal DBO probieren in der stored prozudure.
        Schauen wir mal ob es was bringt

        1. Ok ich werde mal DBO probieren in der stored prozudure.
          Schauen wir mal ob es was bringt

          Das heißt also du weißt selber nicht warum da dba davor steht, bzw. was du mit diesem Namen bezwecken wolltest? Vielleicht solltest du das erst mal rausfinden.

          1. Ok ich werde mal DBO probieren in der stored prozudure.
            Schauen wir mal ob es was bringt
            Das heißt also du weißt selber nicht warum da dba davor steht, bzw. was du mit diesem Namen bezwecken wolltest? Vielleicht solltest du das erst mal rausfinden.

            Ich weiß das ich dba.tabellennamen benutze um die Tabelle zu klassifizieren.
            "Eigentümer"."Tabellenname" sollte eigentlich immer die Form sein, wie man eine Tabelle anspricht.
            Eigentümer = dba
            => db Administatrator => weil ich mit diesem User die Tabelle erstellt habe
            Tabellenname = Anmeldung

            Besitzer der stored Prozedure ist auch dba, aber das sollte nicht storen wenn die dba.sp

            Ich glaube schon zu wissen was ich tuhe und warum.
            Ich weiß nur nicht warum es nicht funktioniert

            Übrigens dbo.Anmeldung funktioniert leider auch nicht

            Hier nochmal die gesamte stored Procedure

              
            ALTER PROCEDURE "DBA"."sp_note_eintragen"(  
            	 IN a_pruefungID integer,  
            	 IN a_matrikelnummer integer,  
            	 IN a_note decimal(2,1))  
            BEGIN  ATOMIC  
            	DECLARE StudentNotFound EXCEPTION FOR SQLSTATE VALUE '99901';  
            	DECLARE PruefungNotFound EXCEPTION FOR SQLSTATE VALUE '99902';  
                declare v integer;  
            	if a_matrikelnummer not in (SELECT pid FROM dba.Student)  
                then  
            		SIGNAL StudentNotFound;  
            	end if;  
            	if a_pruefungID not in (SELECT pruefungID FROM dba.Pruefung)  
                then  
            		SIGNAL PruefungNotFound;  
            	end if;  
            	  
            	if  a_note>4.0  
                then  
                    /*--set v = (select Versuch from dba.Anmeldung WHERE pid = a_Matrikelnummer  
            		  --AND modulID = (SELECT modulID FROM dba.Pruefung WHERE PruefungID=a_pruefungID));  
            		--message v to client; */  
                    UPDATE dba.Anmeldung  
                    SET versuch = versuch+1  
            		WHERE pid = a_Matrikelnummer  
            		  AND modulID = (SELECT modulID FROM Pruefung WHERE PruefungID=a_pruefungID);  
            	else  
            		UPDATE  dba.Anmeldung  
            		SET AnmeldeStatus = 0  
            		WHERE pid = a_matrikelnummer  
            		  AND modulID = (SELECT modulID FROM Pruefung WHERE PruefungID=a_pruefungID) ;  
            	end if;  
            	  
            	INSERT INTO dba.Note(note, pid, pruefungID)  
            	VALUES (a_note, a_matrikelnummer, a_pruefungID);  
            	  
            END
            
    2. Sybase ist NICHT case sensitiv!
      Und wir haben auch nur eine Tabelle anmeldung in der Datenbank.
      Also ist es unwahrscheinlich, das man zwei verschiedene Tabellen anspricht.