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-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

CREATE PROCEDURE-Anweisung (Webdienste)

Verwenden Sie diese Anweisung, um eine Webdienst-Clientprozedur zu erstellen, die eine HTTP- oder SOAP-Anforderung durchführt. Hinweise zum Erstellen einer SQL-Prozedur finden Sie unter CREATE PROCEDURE-Anweisung.

CREATE [ OR REPLACE ] PROCEDURE [ Eigentümer.]Prozedurname ( [ Parameter, ... ] )
URL URL-Zeichenfolge
[ TYPE { HTTP-Typ-Zeichenfolge | SOAP-Typ-Zeichenfolge } ]
[ HEADER Header-Zeichenfolge ]
[ CERTIFICATE Zertifikat-Zeichenfolge ]
[ CLIENTPORT Clientport-Zeichenfolge ]
[ PROXY Proxy-Zeichenfolge ]
[ SET Protokolloption-Zeichenfolge ]
[ SOAPHEADER SOAP-Header-Zeichenfolge ]
[ NAMESPACE Namespace-Zeichenfolge ]
HTTP-Typ-Zeichenfolge :
HTTP[: { GET 
  | POST[:MIME-Typ ] 
  | PUT[:MIME-Typ ] 
  | DELETE 
  | HEAD } ] 
SOAP-Typ-Zeichenfolge :
SOAP[:{ RPC | DOC }
Parameter :
  Parametermodus Parametername Datentyp [ DEFAULT Ausdruck ]
Parametermodus : IN 
| OUT 
| INOUT
URL_Zeichenfolge :
HTTP{HTTPS
  | HTTPS_FIPS
  |://}[Benutzer:Kennwort@]Hostname[:Port] }[/Pfad]
Protokolloption_Zeichenfolge
[ HTTP_Optionsliste]
[, SOAP_Optionsliste ]
HTTP_Optionsliste : 
HTTP(
[ CH[UNK]={ ON | OFF | AUTO } ]
[; VER[SION]={ 1.0 | 1.1 } ]
)
 SOAP_Optionsliste: 
SOAP(
OP[ERATION]=SOAP_Vorgangsname
)
Parameter
  • CREATE PROCEDURE   Sie können eine Webdienst-Clientprozedur erstellen oder ersetzen. PROC kann als Synonym für PROCEDURE verwendet werden.

    Für SOAP-Anforderungen wird der Prozedurname standardmäßig als SOAP-Vorgangsname verwendet. Weitere Hinweise finden Sie weiter unten unter der SET-Klausel.

    Parameternamen müssen den Regeln für andere Datenbankbezeichner, wie z.B. Spaltennamen, entsprechen. Es muss sich dabei um einen gültigen SQL-Datentyp handeln. Eine Liste der gültigen Datentypen finden Sie unter SQL-Datentypen. Nur SOAP-Anforderungen unterstützen die Übertragung von eingetippten Daten des Typs FLOAT, INT etc. HTTP-Anforderungen unterstützen nur die Übertragung von Zeichenfolge, daher sind sie hier auf CHAR-Datentypen beschränkt. Weitere Hinweise zu unterstützten SOAP-Datentypen finden Sie unter Mit Datentypen arbeiten und Mit strukturierten Datentypen arbeiten.

    Parameter können eines der Schlüsselwörter IN, OUT oder INOUT als Präfix haben. Wenn Sie keinen dieser Werte angeben, sind die Parameter standardmäßig INOUT. Die Schlüsselwörter haben die folgenden Bedeutungen:

    • IN   Dieser Parameter ist ein Ausdruck, welcher der Prozedur einen Wert zur Verfügung stellt.

    • OUT   Dieser Parameter ist eine Variable, die von der Prozedur einen Wert erhalten kann.

    • INOUT   Dieser Parameter ist eine Variable, die einen Wert für die Prozedur bereitstellt, und die von der Prozedur einen neuen Wert erhalten kann.

    Wenn Prozeduren mit der CALL-Anweisung ausgeführt werden, müssen nicht alle Parameter angegeben werden. Wenn in der CREATE PROCEDURE-Anweisung ein Standardwert bereitgestellt wird, werden den fehlenden Parametern die Standardwerten zugeordnet. Falls in der CALL-Anweisung kein Argument angegeben und kein Standardwert gesetzt ist, wird ein Fehler ausgegeben.

    Wenn Sie OR REPLACE (CREATE OR REPLACE PROCEDURE) angeben, wird eine neue Prozedur erstellt oder eine bestehende Prozedur mit demselben Namen ersetzt. Diese Klausel ändert die Definition der Prozedur, lässt aber bestehende Berechtigungen unberührt. Ein Fehler wird zurückgegeben, wenn Sie eine Prozedur ersetzen, die gerade verwendet wird.

    Sie können keine TEMPORARY-Webdienst-Prozeduren erstellen.

  • URL-Klausel   Gibt den URI des Webdiensts an. Die optionalen Benutzernamen- und Kennwortparameter bieten eine Möglichkeit, die für die HTTP Basic Authentication erforderlichen Berechtigungsnachweise zu liefern. Die HTTP Basic Authentication Base-64 verschlüsselt die Benutzer- und Kennwortinformationen und übergibt sie an den Header "Authentication" der HTTP-Anforderung. Bei dieser Art der Angabe werden Benutzername und Kennwort unverschlüsselt, als Teil der URL, übergeben.

    Wenn HTTPS als URI-Schema angegeben ist, wird die Prozedur für eine sichere Kommunikation über Secure Socket Layer konfiguriert. Eine solche URI erfordert eine geeignete CERTIFICATE-Klausel, um den Server zu authentifizieren und einen sicheren Datenkanal einzurichten.

    Die Angabe von HTTPS_FIPS zwingt das System, die FIPS-Bibliotheken zu verwenden. Wenn HTTPS_FIPS angegeben wird, aber keine FIPS-Bibliotheken vorhanden sind, werden stattdessen Nicht-FIPS-Bibliotheken verwendet.

    Bei dieser Art der Angabe werden Benutzername und Kennwort unverschlüsselt, als Teil der URL, übergeben.

  • TYPE-Klausel   Wird zur Angabe des Formats verwendet, wenn Sie die Webdienstanforderung durchführen. Wenn SOAP angegeben oder keine TYPE-Klausel aufgenommen ist, wird der Standardtyp SOAP:RPC verwendet. HTTP impliziert HTTP:POST. Da SOAP-Anforderungen immer als XML-Dokumente gesendet werden, wird immer HTTP:POST zum Senden von SOAP-Anforderungen verwendet. Weitere Hinweise finden Sie unter Webdienstclientfunktionen und -prozeduren erstellen.

  • HEADER-Klausel   Wenn Sie HTTP-Webdienst-Clientprozeduren erstellen, verwenden Sie diese Klausel, um Headereinträge der HTTP-Anforderung hinzuzufügen, sie zu ändern oder zu löschen. Die Angabe von Headern ist dem Format sehr ähnlich, das im RFC2616 Hypertext Transfer Protocol - HTTP/1.1 und im RFC822 Standard für ARPA Internet-Textnachrichten verwendet wird, nämlich dass nur druckbare ASCII-Zeichen für HTTP-Header angegeben werden können, deren Groß- und Kleinschreibung nicht berücksichtigt wird.

    Weitere Hinweise zur Verwendung von HTTP-Headern finden Sie unter HTTP-Header verwenden.

  • CERTIFICATE-Klausel   Um eine sichere (HTTPS-)Anforderung durchführen zu können, muss der Client Zugriff auf das vom HTTPS-Server verwendete Zertifikat haben. Die benötigten Informationen werden in einer Zeichenfolge von durch Semikola getrennten Schlüssel/Werte-Paaren angegeben. Das Zertifikat kann in einer Datei abgelegt und der Name der Datei unter Verwendung des Dateischlüssels bereitgestellt werden. Sie können aber auch das ganze Zertifikat in einer Zeichenfolge platzieren. Beides ist jedoch nicht möglich. Folgende Schlüssel sind verfügbar:

    Schlüssel Abkürzung Beschreibung
    file Der Dateiname des Zertifikats
    certificate cert Das Zertifikat selbst
    company co Die im Zertifikat angegebene Organisation
    unit Die im Zertifikat angegebene Organisationseinheit
    name Der im Zertifikat angegebene allgemeine Name

    Zertifikate sind nur bei Anforderungen erforderlich, die entweder an den HTTPS-Server gerichtet sind oder von einem nicht-sicheren zu einem sicheren Server umgeleitet werden können.

  • CLIENTPORT-Klausel   Kennzeichnet die Portnummer, auf der die HTTP-Clientprozedur mithilfe von TCP/IP kommuniziert. Sie wird nur für Verbindungen über Firewalls bereitgestellt und empfohlen, die "ausgehende" TCP/IP-Verbindungen filtern. Sie können eine einzelne Portnummer, Bereiche von Portnummern oder eine Kombination von beiden angeben, z.B. CLIENTPORT "85,90-97". Weitere Hinweise finden Sie unter ClientPort-Protokolloption [CPORT].

  • PROXY-Klausel   Gibt den URI eines Proxyservers an. Wird verwendet, wenn der Client über einen Proxyserver auf das Netzwerk zugreifen muss. Zeigt an, dass die Prozedur eine Verbindung zum Proxyserver herstellen soll, um die Anforderung durch ihn zum Webdienst zu senden.

  • SET-Klausel   Gibt Optionen für protokollspezifisches Verhalten für HTTP und SOAP an. Die folgende Liste beschreibt die unterstützten SET-Optionen. CHUNK und VERSION gelten für das HTTP-Protokoll und OPERATION gilt für das SOAP-Protokoll. Die Ersetzung von Parametern wird bei dieser Klausel unterstützt.

    • 'HTTP(CH[UNK]=option)'   (HTTP oder SOAP) Mit dieser Option können Sie angeben, ob das Aufteilen in Abschnitte verwendet werden soll. Dies ermöglicht es, HTTP-Nachrichten in mehrere Abschnitte aufzuteilen. Mögliche Werte sind: ON (immer Abschnitte verwenden), OFF (keine Abschnitte) und AUTO (Abschnitte nur verwenden, wenn der Inhalt, ausgenommen automatisch generiertes Markup, 8196 Byte überschreitet). Die folgende SET-Klausel aktiviert z.B. das Aufteilen in Abschnitte:
      SET 'HTTP(CHUNK=ON)'

      Wenn die CHUNK-Option nicht angegeben ist, ist das Standardverhalten AUTO. Wenn eine in Abschnitte aufgeteilte Anforderung im AUTO-Modus mit dem Status 505 (HTTP Version Not Supported - HTTP-Version nicht unterstützt) , mit 501 (Not Implemented - Nicht implementiert) oder mit 411 (Length Required - Länge erforderlich) fehlschlägt, wiederholt der Client die Anforderung ohne eine in Abschnitte aufgeteilte Übertragungskodierung.

      Definieren Sie die CHUNK-Option mit OFF (keine Aufteilung), wenn der HTTP-Server in Abschnitte aufgeteilte übertragungskodierte Anforderungen nicht unterstützt.

      Da der CHUNK-Modus die Übertragungskodierung ab HTTP-Version 1.1 unterstützt, erfordert die Definition von CHUNK mit ON, dass die Version (VER) auf 1.1 oder gar nicht gesetzt wird. Im letzten Fall wird 1.1 als die Standardversion verwendet.

    • ' HTTP(VER[SION]=ver)'   (HTTP oder SOAP) Mit dieser Option können Sie die Version des HTTP-Protokolls angeben, das für das Format der HTTP-Nachricht verwendet wird. Beispiel: Die folgende SET-Klausel setzt die HTTP-Version auf 1.1:
      SET 'HTTP(VERSION=1.1)'

      Mögliche Werte sind 1.0 und 1.1. Wenn VERSION nicht angegeben ist:

      • Wenn CHUNK auf ON gesetzt ist, wird 1.1 als die HTTP-Version verwendet.

      • Wenn CHUNK auf OFF gesetzt ist, wird 1.0 als die HTTP-Version verwendet.

      • Wenn CHUNK auf AUTO gesetzt ist, wird entweder 1.0 oder 1.1 verwendet, abhängig davon, ob der Client im CHUNK-Modus sendet.

    • ' SOAP(OP[ERATION]=soap_Vorgangsname)   (Nur SOAP) Mit dieser Option können Sie den Namen des SOAP-Vorgangs angeben, falls er sich vom Namen der Prozedur unterscheidet, die Sie erstellen. Der Wert für OPERATION ist mit dem Namen eines entfernten Prozeduraufrufs vergleichbar. Beispiel: Wenn Sie eine Prozedur mit dem Namen accounts_login erstellen wollen, die einen SOAP-Vorgang mit dem Namen login aufruft, geben Sie in etwa Folgendes ein:
      CREATE PROCEDURE accounts_login( 
            name LONG VARCHAR, 
            pwd LONG VARCHAR )
         SET 'SOAP(OPERATION=login)'

      Wenn die OPERATION-Option nicht angegeben ist, muss der Name des SOAP-Vorgangs mit dem Namen der Prozedur, die Sie erstellen, übereinstimmen.

    Die folgende Anweisung zeigt, wie mehrere Protokolloption-Einstellungen in derselben SET-Klausel kombiniert werden:

    CREATE PROCEDURE accounts_login( 
          name LONG VARCHAR, 
          pwd LONG VARCHAR )
       SET 'HTTP ( CHUNK=ON; VERSION=1.1 ), SOAP( OPERATION=login )' 
       ...

  • SOAPHEADER-Klausel   (Nur SOAP-Format) Wenn Sie einen SOAP-Webdienst als Prozedur deklarieren, verwenden Sie diese Klausel, um einen oder mehrere Headereinträge der SOAP-Anforderung anzugeben. Ein SOAP-Header kann als statische Konstante deklariert oder dynamisch mithilfe des Parameterersetzungsmechanismus (IN-, OUT- oder INOUT-Parameter für hd1, hd2 etc. deklarieren) gesetzt werden. Eine Webdienstprozedur kann einen oder mehrere IN-Modus-Ersetzungsparameter und einen einzigen INOUT- oder OUT-Ersetzungsparameter definieren.

    Das folgende Beispiel zeigt, wie ein Client das Senden von mehreren Headereinträgen mit Parametern und das Empfangen der Antwort-SOAP-Header-Daten angeben kann:

    CREATE PROCEDURE soap_client
      (INOUT hd1 LONG VARCHAR, IN hd2 LONG VARCHAR, IN hd3 LONG VARCHAR) 
      URL 'localhost/some_endpoint' 
      SOAPHEADER '!hd1!hd2!hd3';

    Weitere Hinweise zur Verwendung von SOAP-Headern finden Sie unter SOAP-Header verwenden.

  • NAMESPACE-Klausel   (Nur SOAP-Format) Diese Klausel kennzeichnet den Methoden-Namespace, der üblicherweise sowohl bei SOAP:RPC- als auch bei SOAP:DOC-Anforderungen erforderlich ist. Der die Anforderung verarbeitende SOAP-Server verwendet diesen Namespace, um die Namen von Entitäten im Meldungshauptteil der SOAP-Anforderung zu interpretieren. Der Namespace kann anhand der WSDL-Beschreibung (WSDL = Web Services Description Language) des SOAP-Diensts ermittelt werden, die der Webdienstserver zur Verfügung stellt. Der Standardwert ist die URL der Prozedur bis zur optionalen Pfadkomponente (die aber nicht eingeschlossen ist). Weitere Hinweise zur Verwendung von SOAP-Namespaces finden Sie unter Mit strukturierten Datentypen arbeiten.

Weitere Hinweise zum Erstellen von Webdiensten, sowie Beispiele finden Sie unter SQL Anywhere-Webdienste.

Bemerkungen

Parameterwerte werden als Teil der Anforderung weitergegeben. Die verwendete Syntax hängt vom Typ der Anforderung ab. Bei HTTP:GET werden die Parameter als Teil der URL weitergegeben. Bei HTTP:POST-Anforderungen werden die Werte in den Hauptteil der Anforderung platziert. Parameter von SOAP-Anforderungen werden immer im Anforderungshauptteil gebündelt.

Berechtigungen

RESOURCE-Datenbankberechtigung ist erforderlich.

Sie müssen über DBA-Berechtigungen verfügen, um eine Prozedur für einen anderen Benutzer erstellen zu können.

Nebenwirkungen

Automatisches Festschreiben (Autocommit).

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Persistent Stored Module-Funktion. Die Syntaxerweiterungen für Java-Ergebnismengen werden wie in der optionalen J621-Funktion angegeben verwendet.

Beispiel

Mit dem folgenden Beispiel wird eine Webdienst-Clientprozedur namens FtoC erstellt.

CREATE PROCEDURE FtoC( IN temperature FLOAT,
    INOUT inoutheader LONG VARCHAR,
    IN inheader LONG VARCHAR )
  URL 'http://localhost:8082/FtoCService'
  TYPE 'SOAP:DOC'
  SOAPHEADER '!inoutheader!inheader';