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 的用法 » 存储过程和触发器 » 使用过程、触发器和批处理

 

编写过程的提示

本节提供与开发过程有关的一些提示。

检查是否需要更改命令分隔符

编写过程时,不必在 Interactive SQL 或 Sybase Central 中更改命令分隔符。但是,如果使用其它浏览工具创建和测试过程和触发器,则可能需要将命令分隔符从分号更改为其它字符。

过程内的每个语句均以分号结束。为使某些浏览应用程序能够分析 CREATE PROCEDURE 语句本身,需要采用分号以外的其它命令分隔符。

如果使用需要更改命令分隔符的应用程序,最好将两个分号作为命令分隔符 (;;);如果系统不允许使用多字符分隔符,则使用问号 (?)。

记住在过程内分隔语句

在过程中应使用分号结束每个语句。尽管对于语句列表中的最后一个语句可以省略分号,但最好还是在每个语句后都使用分号。

CREATE PROCEDURE 语句本身包含 RESULT 规范以及构成其主体的复合语句。在 BEGIN 或 END 关键字后,或在 RESULT 子句后,不需要分号。

在过程中为表使用全限定名

如果某一过程具有对该过程中包含的表的引用,则应始终以该表的所有者(创建者)的名称作为表名称的开始部分。

当过程引用某一表时,会使用过程创建者的组成员资格来查找没有显式指定所有者名称的表。例如,如果 user_1 所创建的过程引用 Table_B,并且不指定 Table_B 的所有者,则 Table_B 必须是由 user_1 创建的,或者 user_1 必须(直接或间接地)是 Table_B 所有者组的成员。如果这两个条件都不具备,调用该过程时将出现消息 [未找到表]。

通过在语句内使用相关名来提供用于该表的方便使用的名称,可以尽量减小使用长全限定名所带来的不便。相关名在FROM 子句中加以介绍。

在过程中指定日期和时间

将日期和时间从过程发送到数据库时,它们将作为字符串发送。该字符串的日期部分根据 date_order 数据库选项的当前设置进行解释。由于其它连接可能会将该选项设置为不同的值,因此某些字符串可能会错误地转换为日期,或者数据库可能无法将字符串转换为日期。

在过程中使用日期字符串时,应该使用明确的日期格式 yyyy-mm-ddyyyy/mm/dd。服务器会将这些字符串明确解释为日期,而不论 date_order 数据库选项如何设置。请参见日期和时间数据类型

验证正确传递了过程输入参数

验证输入参数的一个方法是使用 MESSAGE 语句在 Interactive SQL [消息] 选项卡中显示参数的值。例如,以下过程只显示输入参数 var 的值:

CREATE PROCEDURE message_test( IN var char(40) )
BEGIN
   MESSAGE var TO CLIENT;
END;

也可以使用调试程序来验证是否正确传递了过程输入参数。请参见第 2 课:调试存储过程