Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren und Trigger » Prozeduren, Trigger und Batches verwenden

 

Tipps zum Schreiben von Prozeduren

In diesem Abschnitt werden Tipps für die Entwicklung von Prozeduren gegeben.

Befehlstrennzeichen ändern

Sie brauchen beim Schreiben von Prozeduren in Interactive SQL oder Sybase Central das Befehlstrennzeichen nicht zu ändern. Wenn Sie hingegen Prozeduren und Trigger aus einer anderen Anwendung ändern und testen, muss das Befehlstrennzeichen eventuell vom Semikolon auf ein anderes Zeichen gesetzt werden.

Jede Anweisung in der Prozedur endet mit einem Semikolon. Damit andere lesende Anwendungen die CREATE PROCEDURE-Anweisung syntaktisch analysieren können, muss als Befehlstrennzeichen ein anderes Zeichen als das Semikolon verwendet werden.

Wenn Sie eine Anwendung verwenden, für die das Befehlstrennzeichen geändert werden muss, benutzen Sie zwei Semikola (;;) oder ein Fragezeichen (?) als Befehlstrennzeichen, falls das System keine aus mehreren Zeichen zusammengesetzten Befehlstrennzeichen zulässt.

Anweisungen müssen in der Prozedur immer getrennt werden

Jede Anweisung in der Prozedur sollte mit dem Befehlstrennzeichen beendet werden. Sie können zwar das Semikolon für die letzte Anweisung in einer Liste weglassen, aber es gehört zu einer sauberen Programmierungsweise, nach jeder Anweisung ein Semikolon zu setzen.

Die Anweisung CREATE PROCEDURE selbst enthält sowohl die RESULT-Angabe, als auch die zusammengesetzte Anweisung, die ihren Hauptteil ausmacht. Nach den Schlüsselwörtern BEGIN oder END oder nach der Klausel RESULT ist kein Semikolon erforderlich.

Vollqualifizierte Namen für Tabellen in Prozeduren benutzen

Wenn in einer Prozedur auf Tabellen Bezug genommen wird, sollten Sie vor den Tabellennamen immer den Namen des Eigentümers oder Erstellers der Tabelle setzen.

Wenn eine Prozedur auf eine Tabelle Bezug nimmt, benutzt sie die Gruppen-Mitgliedschaften des Tabellenerstellers zur Ermittlung der Position von Tabellen, für die kein expliziter Eigentümername angegeben wurde. Beispiel: Wenn eine Prozedur für die Tabelle Benutzer_1.Tabelle_B auf die Tabelle Tabelle_B Bezug nimmt und den Eigentümer der Tabelle_B nicht angibt, dann muss entweder die Tabelle_B vom Benutzer_1 erstellt worden sein, oder der Benutzer_1 muss (direkt oder indirekt) ein Mitglied einer Gruppe sein, die Eigentümer der Tabelle_B ist. Wenn beide Bedingungen nicht zutreffen, erscheint die Meldung Tabelle nicht gefunden, wenn die Prozedur aufgerufen wird.

Sie können das Problem langer, vollqualifizierter Tabellennamen umgehen, indem Sie einen Korrelationsnamen verwenden. Korrelationsnamen werden unter FROM-Klausel beschrieben.

Datums- und Zeitangaben in Prozeduren

Wenn aus Prozeduren Datums- und Zeitangaben an die Datenbank gesendet werden, erfolgt dies in Form von Zeichenfolgen. Der Datumsteil der Zeichenfolge wird gemäß der aktuellen Einstellung der Datenbankoption "date_order" interpretiert. Da unterschiedliche Verbindungen diese Option auf unterschiedliche Werte setzen können, werden manche Zeichenfolgen vielleicht falsch in Datumswerte konvertiert, oder die Datenbank ist nicht in der Lage, die Zeichenfolge richtig als Datum zu lesen.

Sie sollten das eindeutige Datumsformat JJJJ-MM-TT oder JJJJ/MM/TT verwenden, wenn Sie in einer Prozedur Datumsangaben benutzen. Der Server interpretiert diese Zeichenfolgen eindeutig als Datumswerte, ganz gleich, wie die Datenbankoption "date_order" eingestellt wurde. Weitere Hinweise finden Sie unter Datentypen für Datum und Uhrzeit.

Eingabeargumente der Prozedur auf richtige Übergabe prüfen

Eine Möglichkeit, die Eingabeargumente zu überprüfen, ist den Wert des Parameters auf dem Register "Meldungen" von Interactive SQL anzuzeigen, indem Sie die MESSAGE-Anweisung verwenden. Beispiel: Die folgende Prozedur zeigt einfach den Wert des Eingabeparameters var :

CREATE PROCEDURE message_test( IN var char(40) )
BEGIN
   MESSAGE var TO CLIENT;
END;

Sie können auch den Debugger benutzen, um zu prüfen, ob die Eingabeargumente der Prozedur richtig übergeben wurden. Weitere Hinweise finden Sie unter Lektion 2: In einer gespeicherten Prozedur nach Fehlern suchen.