Peter Thomassen: Stored Procedures: Juchu!

Tag,

in http://forum.de.selfhtml.org/archiv/2006/2/t123007/ hatte ich eine Frage zur Ermittlung der Wurzel eines in einer Datenbank abgebildeten Baumes via Stored Procedures gestellt. Ich hab's nun, nach wie vor unter Verwendung von MySQL, hinbekommen:

  
DELIMITER //  
CREATE FUNCTION contractMain (temp INT)  
 RETURNS INT  
 READS SQL DATA  
 BEGIN  
  DECLARE _parent_id INT;  
  
  REPEAT  
   SET _parent_id = temp;  
   SELECT parent_id INTO temp FROM contract WHERE id = _parent_id;  
   UNTIL temp IS NULL  
  END REPEAT;  
  RETURN _parent_id;  
 END;//  

Es könnte praktisch werden, auch eine Funktion zu haben, um den Vater zu ermitteln, damit der Code dafür jeweils nicht so lang ist. Wäre es dann der Konsistenz halber sinnvoll, diese Funktion auch in der oben stehenden einzusetzen, oder sollte man das der Performance halber lassen?

Danke!
Peter

  1. Nacht,

    habe schon von alten ORACLE- Zeiten geträumt, "oha, stored procedures ..." und gleich in phpmyadmin eingegeben:

    CREATE FUNCTION contractMain (temp INT)
     RETURNS INT
     READS SQL DATA
     BEGIN
      DECLARE _parent_id INT;

    REPEAT
       SET _parent_id = temp;
       SELECT parent_id INTO temp FROM contract WHERE id = _parent_id;
       UNTIL temp IS NULL
      END REPEAT;
      RETURN _parent_id;
     END;

    #1064 - Fehler in der Syntax bei '(temp INT)
     RETURNS INT
     READS SQL DATA
     BEGIN
      DECLARE _pa' in Zeile 1.

    Blubbb ... Seifenblase geplatzt.

    Kalle

    1. Hallo Kalle,

      #1064 - Fehler in der Syntax bei '(temp INT)
      RETURNS INT
      READS SQL DATA
      BEGIN
        DECLARE _pa' in Zeile 1.

      Blubbb ... Seifenblase geplatzt.

      hast du denn überhaupt einen mysqld >= 5.0 am laufen?

      Gruß,
      Benne

      --
      ie:% fl:( br:> va:) ls:> fo:| rl:° ss:) de:[ js:| ch:| mo:} zu:)
      1. hast du denn überhaupt einen mysqld >= 5.0 am laufen?

        ach soooo, davon war ja keine Rede. Habe die gute alte Museumsversion 3.23.58

        Eine UPDATE- Anfrage an meinen Provider internet24 wurde gerade gestern so beantwortet:
        "Als neue Version der MySQL bieten wir Ihnen neben der aktuellen
        3.2 außerdem die Version 4."

        Ist die 5 stabil?

        Wenn ja, wer bietet sie an?

        Gruß, Kalle

        1. Tag,

          Eine UPDATE- Anfrage an meinen Provider internet24 wurde gerade gestern so beantwortet:
          "Als neue Version der MySQL bieten wir Ihnen neben der aktuellen
          3.2 außerdem die Version 4."

          Ist die 5 stabil?

          Ja.

          Wenn ja, wer bietet sie an?

          Ich :-) S. URL oben.

          Dass das mit phpMyAdmin nicht funktioniert, kann auch daran liegen, dass phpMyAdmin SQL-Befehle irgendwie parst, um sie farbig darstellen zu können etc.; wer weiß, ob da nicht auch kleine "Optimierungen" vorgenommen werden, die schiefgehen, wenn phpMyAdmin nicht auf Stored Procedures vorbereitet ist (ist ja in MySQL noch recht neu).

          Außerdem wird das "Befehlsschlusszeichen" ja auf // geändert, weil eine Stored Procedure als zusammenhängender Befehl eingegeben muss, der ja aber selbst Strichpunkte enthält. Möglicherweise macht phpMyAdmin in dem Zusammenhang auch was falsch.

          Bye,
          Peter

          1. Hallo,

            ..., die schiefgehen, wenn phpMyAdmin nicht auf Stored Procedures vorbereitet ist (ist ja in MySQL noch recht neu).

            wovon auszugehen ist, denn in der phpmyadmin Changelog ist nicht erwähnt, dass es Stored Procedures beherrschen würde.

            Gruß,
            Benne

            --
            ie:% fl:( br:> va:) ls:> fo:| rl:° ss:) de:[ js:| ch:| mo:} zu:)
            1. Tag,

              ..., die schiefgehen, wenn phpMyAdmin nicht auf Stored Procedures vorbereitet ist (ist ja in MySQL noch recht neu).
              wovon auszugehen ist, denn in der phpmyadmin Changelog ist nicht erwähnt, dass es Stored Procedures beherrschen würde.

              Ja, aber es muss ja nicht unbedingt sein, dass phpMyAdmin das nicht auch so kann.

              Bye,
              Peter