此语句用于在数据库中创建新过程,采用与 Adaptive Server Enterprise 兼容的方式。
SQL Anywhere 支持 Transact-SQL CREATE PROCEDURE 语句的以下子集。
CREATE PROCEDURE [owner.]procedure_name [ NO RESULT SET ] [ [ ( ] @parameter_name data-type [ = default ] [ OUTPUT ], ... [ ) ] ] [ WITH RECOMPILE ] AS statement-list
以下列出 Transact-SQL 与 SQL Anywhere 语句 (Watcom-SQL) 之间的差异,以帮助那些使用这两种方言编写代码的人员。
带 @ 前缀的变量名 "@"符表示 Transact-SQL 变量名,而 Watcom-SQL 变量可以是任何有效的标识符,也可以带 @ 前缀。
输入和输出参数 Watcom-SQL 过程的参数在缺省情况下为 INOUT,也可指定为 IN、OUT 或 INOUT。Transact-SQL 过程的参数在缺省情况下为 INPUT,或者可以指定为 OUTPUT。这些在 SQL Anywhere 中声明为 INOUT 或 OUT 的参数在 Transact-SQL 中应声明为 OUTPUT。
参数缺省值 Watcom-SQL 使用关键字 DEFAULT 为过程参数提供缺省值,而 Transact-SQL 使用等号 (=) 提供缺省值。
返回结果集 Watcom-SQL 使用 RESULT 子句指定返回的结果集。在 Transact-SQL 过程中,第一个查询的列名或别名将返回到调用环境。
下面的 Transact-SQL 过程阐释了结果集如何从 Transact-SQL 存储过程返回:
CREATE PROCEDURE showdept @deptname varchar(30) AS SELECT Employees.Surname, Employees.GivenName FROM Departments, Employees WHERE Departments.DepartmentName = @deptname AND Departments.DepartmentID = Employees.DepartmentID; |
下面是相应的 Watcom-SQL 过程:
CREATE PROCEDURE showdept(in deptname varchar(30) ) RESULT ( lastname char(20), firstname char(20)) ON EXCEPTION RESUME BEGIN SELECT Employees.Surname, Employees.GivenName FROM Departments, Employees WHERE Departments.DepartmentName = deptname AND Departments.DepartmentID = Employees.DepartmentID END; |
过程主体 Transact-SQL 过程的主体是一系列以关键字 AS 开始的 Transact-SQL 语句。Watcom-SQL 过程的主体是用关键字 BEGIN 和 END 括起来的复合语句。
必须具有 RESOURCE 权限。
自动提交。
SQL/2003 Transact-SQL 扩充。
Sybase SQL Anywhere 支持 Adaptive Server Enterprise CREATE PROCEDURE 语句语法的子集。
如果提供了 Transact-SQL WITH RECOMPILE 可选子句,它将被忽略。数据库启动后,当过程第一次执行时,SQL Anywhere 总是重新编译它们,并存储编译的过程直到数据库停止。
不支持过程组。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |