此语句用于在数据库中新建 Web 服务函数。要创建用户定义的 SQL 函数,请参见CREATE FUNCTION 语句。
CREATE [ OR REPLACE ] FUNCTION [ owner.]function-name ( [ parameter, ... ] ) RETURNS data-type URL url-string [ HEADER header-string ] [ SOAPHEADER soap-header-string ] [ TYPE { 'HTTP[ :{ GET | POST[:MIME-type ] | PUT[:MIME-type ] | DELETE | HEAD } ]' | 'SOAP[:{ RPC | DOC } ]' } ] [ NAMESPACE namespace-string ] [ CERTIFICATE certificate-string ] [ CLIENTPORT clientport-string ] [ PROXY proxy-string ] [ SET protocol-option-string ]
url-string : ' { HTTP | HTTPS | HTTPS_FIPS }://[user:password@]hostname[:port][/path]'
parameter : [ IN ] parameter-name data-type [ DEFAULT expression ]
CREATE FUNCTION 参数名必须符合数据库标识符规则。它们必须是有效的 SQL 数据类型,且必须以关键字 IN 作为前缀,以表明参数是为函数提供值的表达式。
执行函数时,不必指定所有参数。如果在 CREATE FUNCTION 语句中提供了缺省值,则会为缺少的参数指派缺省值。如果调用程序未提供参数,且缺省值未设置,则会给出错误。
指定 OR REPLACE (CREATE OR REPLACE FUNCTION) 将创建一个新函数或替换同名的现有函数。此子句将更改函数的定义,但保留现有权限。不能将 OR REPLACE 子句与临时函数一起使用。
RETURNS 子句 所返回的数据类型可能为 VARCHAR、BINARY、VARBINARY 或 LONG BINARY。数据类型不影响如何处理 HTTP 响应。
URL 子句 仅用于定义 HTTP 或 SOAP Web 服务客户端函数。指定 Web 服务的 URL。其中的用户名和口令参数是可选的,它们提供了一种用于提供 HTTP 基本验证所需的证书的方法。HTTP 基本验证对用户和口令信息进行基于 64 位的编码,并在 HTTP 请求的验证标头中传递它。
指定 HTTPS_FIPS 会强制系统使用 FIPS 库。如果指定了 HTTPS_FIPS,但不存在 FIPS 库,则会改为使用非 FIPS 库。
HEADER 子句 创建 HTTP Web 服务客户端函数时,此子句用于添加或修改 HTTP 请求标头条目。仅可为 HTTP 标头指定可打印 ASCII 字符,且这些字符不区分大小写。有关如何使用此子句的详细信息,请参见CREATE PROCEDURE 语句(Web 服务)中的 HEADER 子句。
有关使用 HTTP 标头的详细信息,请参见处理 HTTP 标头。
SOAPHEADER 子句 当将 SOAP Web 服务声明为函数时,此子句用于指定一个或多个 SOAP 请求标头条目。SOAP 标头可声明为静态常量,也可使用参数替代机制动态设置(为参数 hd1、hd2 等声明 IN、OUT 或 INOUT 参数)。Web 服务函数可定义一个或多个 IN 模式替代参数,但无法定义 INOUT 或 OUT 替代参数。有关如何使用此子句的详细信息,请参见CREATE PROCEDURE 语句(Web 服务)中的 SOAPHEADER 子句。
有关如何使用 SOAP 标头的详细信息,请参见处理 SOAP 标头。
TYPE 子句 用于指定创建 Web 服务请求时使用的格式。如果指定 SOAP 或未包括类型子句,则使用缺省类型 SOAP:RPC。HTTP 隐含 HTTP:POST。由于 SOAP 请求总是作为 XML 文档发送,因此总是使用 HTTP:POST 发送 SOAP 请求。
NAMESPACE 子句 仅适用于 SOAP 客户端函数。此子句标识 SOAP:RPC 和 SOAP:DOC 请求通常都需要的方法命名空间。处理请求的 SOAP 服务器使用此命名空间来解释 SOAP 请求消息主体中的实体的名称。可以通过 Web 服务服务器,从 SOAP 服务的 WSDL(Web Services Description Language,Web 服务描述语言)中获取命名空间。缺省值是函数的 URL,直到(但不包括)可选的路径组成部分。
CERTIFICATE 子句 要创建安全 (HTTPS) 请求,客户端必须有权访问 HTTPS 服务器所用的证书。必要的信息在一个用分号分隔的键/值对字符串中指定。可以将证书放置在一个文件中并使用 file 键提供的文件名,或是将整个证书放置在一个字符串中,但是这两种方法不可同时使用。可以使用以下键:
键 | 缩写 | 说明 |
---|---|---|
file | 证书的文件名。 | |
certificate | cert | 证书本身。 |
company | co | 证书中指定的公司。 |
unit | 证书中指定的公司单元。 | |
name | 证书中指定的公用名。 |
只有被定向到 HTTPS 服务器的请求或可从非安全服务器重定向到安全服务器的请求才需要证书。
CLIENTPORT 子句 标识 HTTP 客户端函数使用 TCP/IP 进行通信的端口号。该子句是为通过防火墙的连接提供的,并建议只用于此类连接,因为防火墙按照 TCP/UDP 端口进行过滤。您可以指定单个端口号、端口号范围或是两者的组合;例如 CLIENTPORT '85,90-97'。请参见ClientPort 协议选项 [CPORT]。
PROXY 子句 指定代理服务器的 URI。在客户端必须通过代理访问网络时使用。此子句指示函数将要连接到代理服务器,并通过它将请求发送到 Web 服务。
CREATE FUNCTION 语句在数据库中创建 Web 服务函数。通过指定所有者名称,可以为其他用户创建函数。
SOAP 和 HTTP 函数的返回类型必须是某种字符数据类型(例如 VARCHAR)。返回值是 HTTP 响应的主体。其中不包括 HTTP 标头信息。如果需要详细信息(例如状态信息),请使用过程而非函数。
参数值将作为请求的一部分进行传递。使用的语法取决于请求的类型。对于 HTTP:GET,参数将作为 URL 的一部分进行传递;对于 HTTP:POST 请求,则将值放在请求主体中。SOAP 请求的参数总是被绑定在请求主体中。
RESOURCE 特权。
用于外部函数(包括 Java 函数)的 DBA 权限。
自动提交。
SQL/2003 持久存储模块特性。
以下语句创建名为 cli_test1 的函数,该函数用于从 localhost 上运行的 get_picture 服务中返回图像:
CREATE FUNCTION cli_test1( image LONG VARCHAR ) RETURNS LONG BINARY URL 'http://localhost/get_picture' TYPE 'HTTP:GET'; |
以下语句发出 URL 为 http://localhost/get_picture?image=widget 的 HTTP 请求:
SELECT cli_test1( 'widget' ); |
以下语句使用了替代参数,以允许将请求 URL 作为输入参数传递。SET 子句用于关闭 CHUNK 模式传输编码。
CREATE FUNCTION cli_test2( image LONG VARCHAR, myurl LONG VARCHAR ) RETURNS LONG BINARY URL '!myurl' TYPE 'HTTP:GET' SET 'HTTP(CH=OFF)' HEADER 'ASA-ID'; |
以下语句发出 URL 为 http://localhost/get_picture?image=widget 的 HTTP 请求:
CREATE VARIABLE a_binary LONG BINARY a_binary = cli_test2('widget', 'http://localhost/get_picture'); SELECT a_binary; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |