Announcement

Collapse
No announcement yet.

Prozedur funktioniert nicht richtig

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

  • Prozedur funktioniert nicht richtig

    Ich habe folgende Prozedur erstellt:<BR><BR>
    <PRE>
    CREATE PROCEDURE Kennzeichen_setzen (
    A_Nr INTEGER,
    T_Nr INTEGER)
    <BR><BR>
    BEGIN
    UPDATE TeilAuftrag
    SET Kennzeichen = 'e'
    WHERE A_Nr = A_Nr AND T_Nr = T_Nr;
    END;
    </PRE>

    Das Problem besteht nur darin, dass er alle mit dem Kennzeichen 'e' versieht und nicht nur das eine, das A_Nr und T_Nr hat.
    <BR><BR>
    Probiere ich hingegen nur die Update-Anweisung in der Datenbank aus, funktioniert es und er setzt nur bei dem einen Datensatz das Kennzeichen auf 'e'.
    <BR><BR>
    Warum klappt es nicht innerhalb der Prozedur?<BR><BR>

  • #2
    Ich Schreib das Statemtent einmal mit anderen Variablennamen und Spaltennamen wie Du:

    UPDATE TeilAuftrag<br>
    SET Kennzeichen = 'e' <br>
    WHERE 1 = 1 AND 2 = 2;<br>

    Das Where ist natürlich für die komplette Tabelle gültig. Verwendet Variablennamen die anderst sind als die Spaltennamen!!!

    lg Dietmar

    ps.: was hat das mit Java zu tun

    Comment


    • #3
      <HTML>
      HI<BR>Vermute mal, dass Die Parameter beim Prozeduraufruf nicht belegt sind und eine Update Anweisung<BR>where A_nr= and T_nr = ;<BR> ist ein gueltiges SQL-Statement und geht auf die Ganze Tabelle<BR>sozusagen ein UPDATE ohne where-Bedingung.........Schei..<BR><BR>Gruss Rol

      Comment


      • #4
        Dietmar geht in die richtige Richtung. Schreibe einfach
        <pre>
        CREATE PROCEDURE Kennzeichen_setzen (
        A_Nr INTEGER,
        T_Nr INTEGER)

        BEGIN
        UPDATE TeilAuftrag
        SET Kennzeichen = 'e'
        WHERE A_Nr = :A_Nr AND T_Nr = :T_Nr;
        END;
        </pre&gt

        Comment


        • #5
          <HTML>
          Hi Andreas<BR>
          Variablen und übergabeparameter werden in Stored Procedures nicht mit Doppelpunkt angesprochen<BR>
          Verwechselst Du da nicht Programmbloecke (Prozeduren) in einem
          Forms-Modul bei dem du dann auf Forms-Felder bzw. Systemvariablen mit Doppelpunkt zugreifst?<BR> SUBSTR(:block1.meineingabefeld,1,3);<BR>:GLOBAL.my GlobalVariable<BR><BR>
          gruss Rol

          Comment


          • #6
            Reden wir über Interbase?

            Falls nein, über welche Datenbank reden wir.

            Falls ja, Irrtum Euer Ehren. Ich mache das seit x Jahren (x nahe bei 10) so und nur(!) so geht es. Auf der linken Seite einer Zuweisung muß man die : weglassen, auf der rechten kann man sie weglassen im where etc sind sie notwendig

            Comment


            • #7
              <HTML>
              Ich spreche hier von Oracle<BR>
              Freut mich dass Du schon soviel Erfahrung hast<BR>
              Uebrigens danke fuer den Titel!<BR><BR>Gruss Roli<BR><BR>
              &#10

              Comment


              • #8
                Danke, ihr habt mir schon geholfen!<BR><BR&gt

                Comment


                • #9
                  <HTML>
                  Ich spreche hier von Oracle<BR>
                  Freut mich dass Du schon soviel Erfahrung hast<BR>
                  Uebrigens danke fuer den Titel!<BR><BR>Gruss Roli<BR><BR>
                  Hier ein Bespiel das aus einem georeferenzierten Tiff-Dateinamen<BR> 45675346.tiff und der angabe um welche georeferenzierte Ecke es sich handelt<BR> und der Breite der Kachel (alles in meter)die Eckkoordinaten zurueckliefert<BR>Oracle Procedure<BR>
                  <PRE>

                  PROCEDURE kachel_koord_return(welche_ecke in varchar2,
                  kachelname in varchar2,
                  kachelgroesse_m in number,
                  r_xlu out number,
                  r_ylu out number,
                  r_xlo out number,
                  r_ylo out number,
                  r_xro out number,
                  r_yro out number,
                  r_xru out number,
                  r_yru out number,
                  koord_len in number ) IS

                  intern_x_char varchar2(20);
                  intern_x_num number;
                  intern_y_char varchar2(20);
                  intern_y_num number;

                  BEGIN
                  if koord_len = 4
                  then
                  intern_x_char := substr(kachelname,1,4);
                  intern_y_char := substr(kachelname,5,4);
                  intern_x_num := to_number(intern_x_char)*1000.0;
                  intern_y_num := to_number(intern_y_char)*1000.0;
                  else
                  intern_x_char := substr(kachelname,1,5);
                  intern_y_char := substr(kachelname,6,5);
                  intern_x_num := to_number(intern_x_char)*100.0;
                  intern_y_num := to_number(intern_y_char)*100.0;
                  end if;
                  if upper(welche_ecke) = 'LO' then

                  r_xlu := intern_x_num ;
                  r_ylu := intern_y_num - kachelgroesse_m;

                  r_xlo := intern_x_num ;
                  r_ylo := intern_y_num ;

                  r_xro := intern_x_num + kachelgroesse_m;
                  r_yro := intern_y_num ;

                  r_xru := intern_x_num + kachelgroesse_m;
                  r_yru := intern_y_num - kachelgroesse_m;

                  elsif upper(welche_ecke) = 'RO' then
                  r_xlu := intern_x_num - kachelgroesse_m;
                  r_ylu := intern_y_num - kachelgroesse_m;

                  r_xlo := intern_x_num - kachelgroesse_m;
                  r_ylo := intern_y_num ;

                  r_xro := intern_x_num ;
                  r_yro := intern_y_num ;

                  r_xru := intern_x_num ;
                  r_yru := intern_y_num - kachelgroesse_m;

                  elsif upper(welche_ecke) = 'RU' then

                  r_xlu := intern_x_num - kachelgroesse_m;
                  r_ylu := intern_y_num ;

                  r_xlo := intern_x_num - kachelgroesse_m;
                  r_ylo := intern_y_num + kachelgroesse_m;

                  r_xro := intern_x_num;
                  r_yro := intern_y_num + kachelgroesse_m;

                  r_xru := intern_x_num ;
                  r_yru := intern_y_num ;

                  elsif upper(welche_ecke) = 'LU' then

                  r_xlu := intern_x_num ;
                  r_ylu := intern_y_num ;

                  r_xlo := intern_x_num ;
                  r_ylo := intern_y_num + kachelgroesse_m;

                  r_xro := intern_x_num + kachelgroesse_m;
                  r_yro := intern_y_num + kachelgroesse_m;

                  r_xru := intern_x_num + kachelgroesse_m;
                  r_yru := intern_y_num ;

                  else
                  r_xlu := 0;
                  r_ylu := 0;

                  r_xlo := 0;
                  r_ylo := 0;

                  r_xro := 0;
                  r_yro := 0;

                  r_xru := 0;
                  r_yru := 0;
                  end if;

                  END;</PRE>
                  </HTML&gt

                  Comment


                  • #10
                    Oralce und InterBase. ja das sind zwei SQL Datenbanken....

                    ... aber mit sonst reichlich vielen Unterschieden im Detail. Insbesondere bei SQL Proceduren ....

                    .. aber wem sag ich das.

                    Daher bitte *immer* die DB mit angeben

                    Comment

                    Working...
                    X