Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

CREATE PROCEDURE 语句 [T-SQL]

此语句用于在数据库中创建新过程,采用与 Adaptive Server Enterprise 兼容的方式。

语法 1

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
参数
  • NO RESULT SET 子句   声明此过程不返回结果集。当外部环境需要知道某个过程不返回结果集时,这将非常有用。

注释

以下列出 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 总是重新编译它们,并存储编译的过程直到数据库停止。

    不支持过程组。