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 SERVICE-Anweisung

Benutzen Sie diese Anweisung, um einen Datenbankserver als Webserver fungieren zu lassen.

Syntax 1 - DISH-Dienst
CREATE SERVICE Dienstname
TYPE 'DISH'
[ GROUP { Gruppenname | NULL } ]
[ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ] | 'XML' | NULL } ]
[ Gemeinsame_Attribute ]
Syntax 2 - SOAP-Dienst
CREATE SERVICE Dienstname
TYPE 'SOAP'
[ DATATYPE { ON | OFF | IN | OUT } ]
[ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ] | 'XML' | NULL } ]
[ Gemeinsame_Attribute ]
AS Anweisung
Syntax 3 - Sonstige Dienste
CREATE SERVICE Dienstname
TYPE { 'RAW' | 'HTML'  | 'JSON'| 'XML' }
[ URL [ PATH ] { ON | OFF | ELEMENTS } ]
[ Gemeinsame_Attribute ]
[ AS { Anweisung | NULL } ]
Gemeinsame_Attribute:
[ AUTHORIZATION { ON | OFF } ]
[ ENABLE | DISABLE ]
[ METHODS 'Methode,...' ]
[ SECURE { ON | OFF } ]
[ USER { Benutzername | NULL } ]
Methode:
DEFAULT
| POST
| GET
| HEAD
| PUT
| DELETE
| NONE
| *
Parameter
  • Dienstname   Webdienstnamen können aus einer beliebigen Sequenz von alphanumerischen Zeichen oder aus den Zeichen "/"," -", "_", ".", "!", "~", "*", "'", "(", oder ")" bestehen, nur dass der erste Name nicht mit einem Schrägstrich (/) beginnen und der Name nicht zwei oder mehr aufeinanderfolgende Schrägstrichzeichen enthalten darf.

    Im Gegensatz zu anderen Diensten dürfen Sie in einem DISH-Dienstnamen keinen Schrägstrich (/) verwenden.

  • TYPE-Klausel   Gibt den Typ des Dienstes durch die zurückgegebene Ergebnismenge an. Der Typ muss einer der aufgelisteten Typen sein. Es gibt keine Standardeinstellung.

    • 'SOAP'   Die Ergebnismenge wird als SOAP-Antwort zurückgegeben. Das Format der Daten wird durch die FORMAT-Klausel bestimmt. Eine Anforderung an einen SOAP-Dienst muss eine gültige SOAP-Anforderung, nicht nur eine einfache HTTP-Anforderung sein. Weitere Hinweise zu den SOAP-Standards finden Sie unter [external link] http://www.w3.org/TR/2000/NOTE-SOAP-20000508/.

    • 'DISH'   Ein DISH-Dienst (Determine SOAP Handler) agiert als Stellvertreter für jene SOAP-Dienste, die durch die GROUP-Klausel festgelegt sind, und generiert auf Anfrage ein WSDL-Dokument (Web Services Description Language) für jeden dieser SOAP-Dienste.

    • 'RAW'   Das Ergebnis wird ohne weitere Formatierung an den Client gesendet. Sie können formatierte Dokumente produzieren, indem Sie die erforderlichen Tags ausdrücklich innerhalb der Prozedur erzeugen. Wenn Sie einen Dienst mit TYPE 'RAW' erstellen, müssen Sie den HTTP-Header Inhaltstyp mit sa_set_http_header definieren. Sonst können manche Browser den Text nur unformatiert anzeigen. Weitere Hinweise finden Sie unter Prozeduren verwenden, die HTML-Dokumente liefern und sa_set_http_header-Systemprozedur.

    • 'HTML'   Die Ergebnismenge einer Anweisung oder Prozedur wird automatisch in ein HTML-Dokument formatiert, das eine Tabelle enthält.

    • 'JSON'   Die Ergebnismenge wird in JavaScript Object Notation (JSON) zurückgegeben. JSON-Webdienste sind XML-Webdiensten insofern ähnlich, als beide "generische" HTTP-Anforderungen akzeptieren (das heißt, die Anforderungen müssen keinen speziell formatierten Hauptteil wie SOAP-Webdienste enthalten). Weitere Hinweise zu JSON finden Sie unter [external link] http://www.json.org

    • 'XML'   Die Ergebnismenge wird als XML zurückgegeben. Wenn die Ergebnismenge bereits XML ist, wird keine weitere Formatierung angewendet. Wenn sie nicht bereits XML ist, wird sie automatisch als XML formatiert. Die Wirkung ist mit der bei der Verwendung der FOR XML RAW-Klausel in einer SELECT-Anweisung vergleichbar.

  • GROUP-Klausel   Gilt nur für DISH-Dienste. Legt ein gemeinsames Präfix fest, das steuert, welche SOAP-Dienste der DISH-Dienst bereitstellt. Beispiel: Die Angabe von GROUP xyz legt nur SOAP-Dienste xyz/aaaa, xyz/bbbb oder xyz/cccc vor, aber nicht abc/aaaa oder xyzaaaa. Wenn kein Gruppenname angegeben ist, legt der DISH-Dienst alle SOAP-Dienste in der Datenbank vor. SOAP-Dienste können durch mehr als einen DISH-Dienst vorgelegt werden. In Gruppennamen sind dieselben Zeichen wie in Dienstnamen zulässig.

    Beim Erstellen eines Dienstes ist GROUP NULL gleichwertig mit der Nichtangabe einer GROUP-Klausel. Wenn allerdings GROUP NULL in einer ALTER SERVICE-Anweisung verwendet wird, entfernt die Klausel alle bestehenden Gruppierungen, während das einfache Nichtvorhandensein einer GROUP-Klausel dies nicht bewirkt.

  • DATATYPE-Klausel   Gilt nur für SOAP-Dienste. Steuert, ob die Datentypisierung bei Parametereingaben und/oder Ergebnismengenausgaben (Antworten) für alle SOAP-Dienstformate unterstützt wird. Wenn sie unterstützt wird, ermöglicht die Datentypisierung es einem SOAP-Toolkit, die Daten syntaktisch zu analysieren und sie in den entsprechenden Datentyp umzuwandeln. Parameterdatentypen werden im Schema-Abschnitt der WDSL angezeigt, der vom DISH-Dienst erstellt wird. Ausgabedatentypen werden als XML-Schematypattribute für die jeweilige Datenspalte dargestellt.

    Die folgenden Werte sind bei der DATATYPE-Klausel zulässig:

    • ON   Generierung der Datentypisierung für Eingabeparameter und Ergebnismengenantworten.

    • OFF   Keine Generierung der Datentypisierung für Eingabeparameter und Ergebnismengenantworten (Standardwert).

    • IN   Generierung der Datentypisierung nur für Eingabeparameter

    • OUT   Generierung der Datentypisierung nur für Ergebnismengenantworten

    Weitere Hinweise zu SOAP-Diensten finden Sie unter SOAP-Dienste verwenden.

    Weitere Hinweise zur Zuordnung von XML-Schematypen zu SQL-Datentypen finden Sie unter Mit Datentypen arbeiten.

  • URL-Klausel   Bestimmt, ob URL-Pfade akzeptiert werden und, falls ja, wie sie verarbeitet werden sollen.

    • OFF   OFF gibt an, dass nach dem Dienstnamen in einer URL-Anforderung keine Angaben folgen können. Geben Sie OFF an, wenn der Rest des URL-Pfads nicht zulässig ist oder wenn der Dienstname mit einem Schrägstrich (/) endet. Wenn Sie beispielsweise OFF gewählt haben und den URL-Pfad http://<Hostname>/<Dienstname>/aaa/bbb/ccc verwenden, ist nur <Hostname>/<Dienstname> erlaubt. Der Rest des URL-Pfads, /<aaa/bbb/ccc, ist nicht zulässig.

    • ON   ON gibt an, dass der Rest der URL als Wert der Variablen namens "URL" interpretiert wird. Geben Sie ON an, wenn der Rest des URL-Pfads zulässig und als einzelner Parameter gesetzt ist. Beispiel: Im URL-Pfad http://<Hostname>/<Dienstname>/aaa/bbb/ccc ist der Rest des Pfades aaa/bbb/ccc.

    • ELEMENTS   ELEMENTS gibt an, dass der Rest des URL-Pfads beim Schrägstrich in eine Liste von bis zu 10 Elementen geteilt wird, die als mehrfache Parameter behandelt werden. Im URL-Pfad http://<Hostname>/<Dienstname>/aaa/bbb/ccc, wird z.B. jedes Element des Pfads als separater Parameter behandelt. Zum Beispiel url1=aaa, url2=bbb, url3=ccc usw. Die Werte werden Variablen zugewiesen, die mit URL plus einem nummerischen Suffix von 1 bis 10 benannt werden. Wenn weniger als 10 Variable übergeben werden, werden die restlichen Variablen auf NULL gesetzt.

    Wenn der Dienstname mit dem Schrägstrich (/) endet, muss die URL-Klausel auf OFF gesetzt werden. Der Standardwert ist OFF.

    Weitere Hinweise zu URLs finden Sie unter Wie URLs interpretiert werden und Mit Variablen arbeiten.

  • FORMAT-Klausel   Gilt nur für DISH- und SOAP-Dienste. Generiert Ausgabeformate, die mit verschiedenen Typen von SOAP-Clients kompatibel sind, wie etwa .NET oder Java JAX-RPC. Wenn das Format eines SOAP-Dienstes nicht angegeben ist, wird das Format von der DISH-Dienstdeklaration des Dienstes übernommen. Wenn der DISH-Dienst ebenfalls kein Format deklariert, wird standardmäßig DNET genommen, was mit .NET-Clients kompatibel ist. Ein SOAP-Dienst, der kein Format deklariert, kann mit verschiedenen Typen von SOAP-Clients verwendet werden, indem mehrere DISH-Dienste definiert werden, von denen jeder einen anderen FORMAT-Typ hat.

    Folgende Formate werden unterstützt:

    • 'DNET'   Das Microsoft DataSet-Format zur Verwendung mit .NET SOAP-Clients. DNET ist der standardmäßige FORMAT-Wert und war vor Version 9.0.2 von SQL Anywhere das einzige verfügbare Format.

    • 'CONCRETE'   Ein plattformneutrales DataSet-Format zur Verwendung mit Clients wie JAX-WS oder mit Clients, die automatisch Schnittstellen generieren, die auf dem Format der zurückgegebenen Datenstruktur basieren. Wenn dieser Formattyp angegeben ist, wird entweder ein explizites Datensatzelement oder ein SimpleDataset-Element in der WSDL exponiert.

      Wenn EXPLICIT ON angegeben ist (Standard), beschreibt die WSDL ein explizites DataSet-Element, sofern folgende Kriterien erfüllt sind:

      • Die CREATE SERVICE-Anweisung ruft eine gespeicherte Prozedur auf.

      • Eine RESULT-Klausel ist in der gespeicherten Prozedur angegeben.

      Wenn die SERVICE-Anweisung oder die gespeicherte Prozedur nicht korrekt definiert ist, wird die Ergebnismengenzuordnung, die von den DISH-Diensten erstellt wird, auf das SimpleDataset-Element zurückgesetzt.

      Wenn EXPLICIT OFF angegeben ist, beschreibt die WSDL ein SimpleDataset-Element. Das SimpleDataset-Element beschreibt die Ergebnismenge als Verschachtelungshierarchie einer Zeilenmenge, die aus einem Array von Zeilen besteht, von denen jede ein Array aus Spaltenelementen enthält. Das explizite Datensatzelement erweitert dies durch die Einbeziehung der tatsächlichen Namen und Typen der einzelnen Spalten.

    • 'XML'   Ein einfaches XML-Zeichenfolgeformat. Das DataSet-Objekt wird als Zeichenfolge zurückgegeben, die an einen XML-Parser übergeben werden kann. Dieses Format ist das portierbarste zwischen SOAP-Clients.

    • NULL   Für SOAP-Dienste erbt das Format vom DISH-Dienstformat (wenn ein solches vorhanden ist) oder verwendet als Standard DNET. Für DISH-Dienste wird standardmäßig DNET verwendet. Wenn beim Erstellen eines neuen Dienstes FORMAT NULL angegeben wird, entspricht dies der Angabe eines beliebigen Formats. Wenn allerdings FORMAT NULL in einer ALTER SERVICE-Anweisung verwendet wird, setzt die Klausel·alle vorherigen Formate außer Kraft, während das Nichtvorhandensein einer FORMAT-Klausel das vorherige Format nicht außer Kraft setzt.

  • Anweisung   Wenn die Anweisung NULL ist, muss die URL die auszuführende Anweisung angeben. Andernfalls kann über den Dienst nur die angegebene SQL-Anweisung ausgeführt werden. SOAP-Dienste erfordern Anweisungen. DISH-Dienste können keine haben. Der Standardwert ist NULL.

    Es wird dringend empfohlen, dass alle Dienste, die in Produktionssystemen benutzt werden, eine Anweisung definieren. Die Anweisung kann nur dann NULL sein, wenn die Autorisierung aktiviert ist.

  • AUTHORIZATION-Klausel   Bestimmt, ob die Benutzer einen Benutzernamen und ein Kennwort über die HTTP-Grundautorisierung angeben müssen, wenn sie eine Verbindung mit dem Dienst herstellen. Der Standardwert ist ON. Wenn die Autorisierung deaktiviert ist (OFF), muss die AS-Klausel verwendet werden und der einzelne Benutzer muss mit der USER-Klausel angegeben werden. Alle Anforderungen werden mit dem Konto und den Berechtigungen des betreffenden Benutzers ausgeführt. Wenn die Autorisierung aktiviert ist (ON), müssen alle Benutzer einen Benutzernamen und ein Kennwort angeben. Der Zugriff auf diesen Dienst kann durch Angabe eines Benutzer- oder Gruppennamens mithilfe der USER-Klausel eingeschränkt werden. Wenn der Benutzername NULL ist, haben alle bekannten Benutzer Zugriff auf den Dienst. Es wird empfohlen, Produktionssysteme mit aktivierter Autorisierung auszuführen und einer Benutzergruppe die Berechtigung für den Zugriff auf diesen Dienst zu erteilen.

    Wenn der Autorisierungswert ON ist, benutzt ein HTTP-Client, der sich mit einem Webdienst verbindet, die Basisauthentifizierung (RFC 2617), die die Benutzer- und Kennwortdaten mit base-64-Kodierung verschleiert. Es wird empfohlen, für erweiterte Sicherheit das HTTPS-Protokoll zu verwenden.

  • ENABLE- und DISABLE-Klauseln   Legt fest, ob der Dienst verfügbar ist. Standardmäßig ist ein Dienst aktiviert, wenn er erstellt wird. Beim Erstellen oder Ändern eines Dienstes können Sie eine ENABLE- oder DISABLE-Klausel einbauen. Durch das Deaktivieren eines Dienstes wird dieser offline gesetzt. Später kann er mit ALTER SERVICE und einer ENABLE-Klausel aktiviert werden.

  • METHODS-Klausel   Zeigt an, welche Anforderungstypen vom Dienst unterstützt werden. Gültige Anforderungstypen sind DEFAULT, POST, GET, HEAD, PUT, DELETE und NONE. Ein Sternchen (*) kann als Platzhalter für die POST-, GET- und HEAD-Attribute verwendet werden, die die Standard-Anforderungstypen für die RAW-, HTML- und XML-Diensttypen sind. Die Standard-Anforderungstypen für SOAP-Dienste sind POST und HEAD. Die Standard-Anforderungstypen für DISH-Dienste sind GET und HEAD. Nicht alle Anforderungstypen sind für alle Diensttypen gültig. Die folgende Tabelle fasst die gültigen Anforderungstypen für jeden Diensttyp zusammen.

    Anforderungstyp Gilt für Dienst Beschreibung
    DEFAULT all Verwenden Sie DEFAULT, um die Gruppe von Anforderungstypen auf die Standardwertgruppe für einen bestimmten Diensttyp zurückzusetzen. Kann nicht in eine Liste mit anderen Anforderungstypen aufgenommen werden.
    POST SOAP, DISH, RAW, HTML, XML Standardmäßig aktiviert für SOAP, RAW, HTML und XML.
    GET DISH, RAW, HTML, XML Standardmäßig aktiviert für DISH, RAW, HTML und XML.
    HEAD SOAP, DISH, RAW, HTML, XML Standardmäßig aktiviert für SOAP, DISH, RAW, HTML und XML.
    PUT RAW, HTML, XML Standardmäßig nicht aktiviert.
    DELETE RAW, HTML, XML Standardmäßig nicht aktiviert.
    NONE all

    Verwenden Sie NONE, um den Zugriff auf einen Dienst zu deaktivieren. Bei der Anwendung auf einen SOAP-Dienst kann auf den Dienst nicht direkt über eine SOAP-Anforderung zugegriffen werden.

    Verwenden Sie immer einen DISH-Dienst als SOAP-Endpunkt für einen oder mehrere SOAP-Dienste. Um den exklusiven Zugriff auf einen SOAP-Vorgang über einen DISH-Dienst-Endpunkt zu erzwingen, geben Sie für jeden SOAP-Dienst NONE an.

    * RAW, HTML, XML Wie 'POST,GET,HEAD'.

    Beispiel: Um die vollständige Liste von Anforderungstypen für den RAW-Diensttyp anzugeben, können Sie eine der folgenden Klauseln verwenden:

    METHODS '*,PUT,DELETE'
    METHODS 'POST,GET,HEAD,PUT,DELETE'

    Um die Liste der Anforderungstypen für einen beliebigen Diensttyp auf seinen Standardwert zu setzen, können Sie die folgende Klausel verwenden:

    METHODS 'DEFAULT'

  • SECURE-Klausel   Gibt an, ob nicht gesicherte Verbindungen angenommen werden. ON bedeutet, dass nur HTTPS-Verbindungen angenommen werden. Dienstanforderungen, die über den HTTP-Port empfangen werden, leitet das System automatisch an den HTTPS-Port weiter. OFF bedeutet, dass sowohl HTTP- als auch HTTPS-Verbindungen angenommen werden. Der Standardwert ist OFF.

  • USER-Klausel   Wenn die Autorisierung deaktiviert ist, wird dieser Parameter obligatorisch und gibt die Benutzer-ID an, die für die Ausführung aller Dienstanforderungen verwendet wird. Wenn die Autorisierung aktiviert ist (Standardwert), gibt diese optionale Klausel den Benutzer bzw. die Benutzergruppe an, die berechtigt ist, auf diesen Dienst zuzugreifen. Der Standardwert ist NULL, d.h., alle Benutzer haben Zugriff.

Bemerkungen

Die CREATE SERVICE-Anweisung veranlasst, dass der Datenbankserver wie ein Webserver agiert. Ein neuer Eintrag wird in der Systemtabelle ISYSWEBSERVICE erstellt.

Berechtigungen

DBA-Berechtigung ist erforderlich.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiele

Wenn Sie schnell einen Webserver einrichten wollen, starten Sie einen Datenbankserver mit der Option -xs (z.B. -xs http) und führen Sie die folgende Anweisung aus:

CREATE SERVICE tables TYPE 'HTML'
   AUTHORIZATION OFF
   USER DBA
   AS SELECT *
      FROM SYS.SYSTAB;

Nachdem Sie diese Anweisung ausgeführt haben, öffnen Sie mit einem beliebigen Browser die URL http://localhost/tables.

Das nachfolgende Beispiel zeigt, wie das Programm "Hello World" geschrieben wird.

CREATE PROCEDURE hello_world_proc( )
RESULT (html_doc long varchar)
BEGIN
   CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' );
   SELECT '<html>\n'
       || '<head><title>Hello World</title></head>\n'
       || '<body>\n'
       || '<h1>Hello World!</h1>\n'
       || '</body>\n'
       || '</html>\n';
END;
CREATE SERVICE hello_world TYPE 'RAW'
AUTHORIZATION OFF
USER DBA
AS CALL hello_world_proc;

Nachdem Sie diese Anweisung ausgeführt haben, öffnen Sie mit einem beliebigen Webbrowser den URL http://localhost/hello_world.

Das folgende Beispiel zeigt, wie ein JSON-Dienst erstellt wird.

CREATE PROCEDURE ListEmployees()
RESULT (
 EmployeeID            integer,
 Surname               person_name_t,
 GivenName             person_name_t,
 StartDate             date,
 TerminationDate       date )
BEGIN
  SELECT EmployeeID, Surname, GivenName, 
         StartDate, TerminationDate 
  FROM Employees 
END;
CREATE SERVICE "JSON/EmployeeList"
TYPE 'JSON'
AUTHORIZATION OFF
SECURE OFF
USER DBA
AS CALL ListEmployees();

Nach dem Ausführen dieser Anweisung öffnen Sie mit einem Webbrowser den URL http://localhost/JSON/EmployeeList und speichern die JSON-Antwort in eine Datei, damit sie mit einem Texteditor durchsucht werden kann.