Announcement

Collapse
No announcement yet.

Stored-Procedure, Delimiter

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

  • Stored-Procedure, Delimiter

    Hey Leute,

    kann mir vllt einer von euch kurz erklären, warum bei der Definition von Stored-Procedures der Delimiter temporär für die Definition des Prozedur-Rumpfes geändert werden muss?
    Ich weiß, dass es ohne nicht geht, habe nur nicht so ganz verstanden warum MySQL das von einem verlangt. Ich finde das bis jetzt nicht wirklich intuitiv.

    Gruß :-)

  • #2
    warum bei der Definition von Stored-Procedures der Delimiter temporär für die Definition des Prozedur-Rumpfes geändert werden muss?
    Nur wenn der Delimiter in der SP benötigt wird.

    Ich weiß, dass es ohne nicht geht, habe nur nicht so ganz verstanden warum MySQL das von einem verlangt.
    Doch es geht ohne, benötigst du allerdings den Delimiter in der SP muss er vorher geändert werden.
    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

    Comment


    • #3
      Danke für deine Hilfe
      In dem Rumpf der SP stehen ja für gewöhnlich SQL-Statement, die man mit einem ";" abschließt. Somit müsste man doch in fast allen Fällen den Delimiter neu setzen oder ?

      Warum stört es MySQL überhaupt, wenn im Rumpf einer SP ein ";" steht? Das ist mir etwas schleierhaft.

      Gruß

      Comment


      • #4
        In dem Rumpf der SP stehen ja für gewöhnlich SQL-Statement, die man mit einem ";" abschließt.
        Nicht immer aber immer öfter.

        Somit müsste man doch in fast allen Fällen den Delimiter neu setzen oder ?
        In den genannten Fällen, ja.

        Warum stört es MySQL überhaupt, wenn im Rumpf einer SP ein ";" steht?
        Der Delimiter teilt SQL-Befehle von einander, steht also der Delimiter in der SP würde die SP quasi an dieser Stelle in einzelne Anweisungen getrennt und wäre somit syntaktisch inkorrekt.
        Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Hey :-)

          Wenn man den Delimiter auf ein neues Zeichen wie z.B. "//" setzen würde, dann müsste MySQL die Befehle doch nun an "//" trennen und die SP müsste eigentlich wieder syntaktisch inkorrekt sein oder nicht?

          Ich verstehe es doch richtig, dass der neu gesetzte Delimiter einfach nur ein andere Zeichenfolge für die semantische Bedeutung von ";" ist oder?

          Gruß :-)

          Comment


          • #6
            Wenn man den Delimiter auf ein neues Zeichen wie z.B. "//" setzen würde, dann müsste MySQL die Befehle doch nun an "//" trennen und die SP müsste eigentlich wieder syntaktisch inkorrekt sein oder nicht?
            Ähm, das ist der Sinn der ganzen Übung.
            Edit: huch ich hatte korrekt gelesen
            Gerade damit die SP syntaktisch korrekt ist, wird bei deren Erstellung kurzzeitig der Delimiter geändert.

            Ich verstehe es doch richtig, dass der neu gesetzte Delimiter einfach nur ein andere Zeichenfolge für die semantische Bedeutung von ";" ist oder?
            Es bedeutet einfach nur das Ende einer Anweisung.

            Der Delimiter ; hat mit dem MySQL-Dialekt nichts zu tun, deshalb ist dieser "nur" in der MySQL-Konsole gültig, wird aber von den meisten (eigtl. allen mir bekannten) Clients adaptiert (aus diesem Grund gibt es die Anweisung DELIMITER auch nur in der MySQL-Konsole).
            Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

            Comment


            • #7
              Hallo,

              Originally posted by MatheStein View Post
              ...Ich verstehe es doch richtig, dass der neu gesetzte Delimiter einfach nur ein andere Zeichenfolge für die semantische Bedeutung von ";" ist oder?
              Nein, das verstehst du falsch.

              Originally posted by dibo33 View Post
              ...Der Delimiter ; hat mit dem MySQL-Dialekt nichts zu tun, deshalb ist dieser "nur" in der MySQL-Konsole gültig, wird aber von den meisten (eigtl. allen mir bekannten) Clients adaptiert (aus diesem Grund gibt es die Anweisung DELIMITER auch nur in der MySQL-Konsole).
              Denn genauso ist es. Der DELIMITER der MySQL-Konsole hat mit dem syntaktischen ; des MySQL-Dialektes für Stored Programs NICHTS zu tun! In der Standardeinstellung sind nur beide identisch.

              Originally posted by MatheStein View Post
              ...Wenn man den Delimiter auf ein neues Zeichen wie z.B. "//" setzen würde, dann müsste MySQL die Befehle doch nun an "//" trennen und die SP müsste eigentlich wieder syntaktisch inkorrekt sein oder nicht?
              Nein, das Statement ist und bleibt mit dem Semikolon syntaktisch korrekt, da dieses zum Sprachumfang gehört! Der Interpreter der MySQL-Konsole (oder eines anderen Clients) trennt die einzelnen Statements bei Verwendung eines anderen Delimiter nur wieder korrekt.

              Um es nochmal deutlich zu machen. Der MySQL-Server selbst kann pro Anfrage IMMER nur EIN Statement abarbeiten. Er kennt deshalb keinen DELIMITER - braucht er auch nicht. Der DELIMITER ist ein Konstrukt der MySQL-Konsole. Mit diesem wird das Ende einer Befehlseingabe angezeigt und veranlasst das Absenden der bisherigen Eingabe (OHNE den Delimiter) als Anfrage an den Server. Werden in der Konsole also mehrere Statements mit Delimiter getrennt, verpackt sie die Konsole in einzelne Anfragen an den Server.
              Das Problem und der Konflikt entsteht also nur in der Konsole und deshalb gibt es hier die Möglichkeit den Delimiter zu ändern.

              Gruss Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X