此语句用于在数据库中创建新过程,采用与 Adaptive Server Enterprise 兼容的方式。
Adaptive Server Anywhere 支持 Transact-SQL CREATE PROCEDURE 语句的下列子集。
CREATE PROCEDURE [owner.]procedure_name
[ NO RESULT SET ]
[ [ ( ] @parameter_name data-type [ = default ] [ OUTPUT ], ... [ ) ] ]
[ WITH RECOMPILE ] AS statement-list
NO RESULT SET 子句 声明此过程不返回结果集。当外部环境需要知道某个过程不返回结果集时,这是非常有用的。
下面列出 Transact-SQL 与 Adaptive Server Anywhere 语句(Watcom-SQL) 之间的差异,以帮助用这两种方言编写代码的人员。
带 @ 前缀的变量名 "@"符表示 Transact-SQL 变量名,而 Watcom-SQL 变量可以是任何有效的标识符,也可以带 @ 前缀。
输入和输出参数 Watcom-SQL 过程的参数在缺省情况下为 INOUT,或者可以指定为 IN、OUT 或 INOUT。Transact-SQL 过程的参数在缺省情况下为 INPUT,或者可以指定为 OUTPUT。在 Adaptive Server 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 employee.emp_lname, employee.emp_fname FROM department, employee WHERE department.dept_name = @deptname AND department.dept_id = employee.dept_id
下面是相应的 Watcom-SQL 过程:
CREATE PROCEDURE showdept(in deptname
varchar(30) )
RESULT ( lastname char(20), firstname char(20))
ON EXCEPTION RESUME
BEGIN
SELECT employee.emp_lname, employee.emp_fname
FROM department, employee
WHERE department.dept_name = deptname
AND department.dept_id = employee.dept_id
END过程主体 Transact-SQL 过程的主体是一系列以关键字 AS 开始的 Transact-SQL 语句。Watcom-SQL 过程的主体是关键字 BEGIN 和 END 之间的复合语句。
必须有 RESOURCE 权限。
自动提交。
SQL/92 Transact-SQL 扩展。
SQL/99 Transact-SQL 扩展。
Sybase Anywhere 支持 Adaptive Server Enterprise CREATE PROCEDURE 语句语法的子集。
如果提供了 Transact-SQL WITH RECOMPILE 可选子句,它将被忽略。数据库启动后,当过程第一次执行时,Adaptive Server Anywhere 总是重新编译它们,并存储编译的过程直到数据库停止。
不支持过程组。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。