调试 SPL 例程

在您成功地创建并运行 SPL 例程之后,您可遇到逻辑错误。如果例程有逻辑错误,则请使用 TRACE 语句来帮助查找它们。您可跟踪下列项的值:
  • 变量
  • 参数
  • 返回值
  • SQL 错误代码
  • ISAM 错误代码

要生成被跟踪的值的列表,首先请使用 SQL 语句 SET DEBUG FILE 来命名包含被跟踪的输出的文件。当您创建 SPL 例程时,请包括 TRACE 语句。

下列方法指定 TRACE 输出的形式。
语句
操作
TRACE ON
跟踪 SQL 语句之外的所有语句。在使用变量之前,打印它们的内容。跟踪例程调用和返回的值。
TRACE PROCEDURE
仅跟踪例程调用和返回的值。
TRACE expression
打印文字或表达式。如果必要,在将表达式的值发送至文件之前,计算它。
下图演示您可如何使用 TRACE 语句来监视 SPL 函数执行的方式。

图: TRACE 语句。

CREATE FUNCTION read_many  (lastname CHAR(15))
            RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15),
            CHAR(2), CHAR(5);
            
            DEFINE p_lname,p_fname, p_city CHAR(15);
            DEFINE p_add CHAR(20);
            DEFINE p_state CHAR(2);
            DEFINE p_zip CHAR(5);
            DEFINE lcount, i INT;
            
            LET lcount = 1;
            
            TRACE ON;      -- 从此开始跟踪每个表达式
            TRACE 'Foreach starts';  -- 跟踪带有文字的语句
            
            FOREACH
            SELECT fname, lname, address1, city, state, zipcode
            INTO p_fname, p_lname, p_add, p_city, p_state, p_zip
            
            FROM customer
            WHERE lname = lastname
            RETURN p_fname, p_lname, p_add, p_city, p_state, p_zip
            WITH RESUME;
            LET lcount = lcount + 1;   -- 对返回的地址计数
            END FOREACH
            
            TRACE 'Loop starts';       -- 另一文字 
            FOR i IN (1 TO 5)
            BEGIN
            RETURN i , i+1, i*i, i/i, i-1,i WITH RESUME; 
            END
            END FOR;
            
            END FUNCTION; 

使用 TRACE ON 语句,在您每次执行被跟踪的例程时,都将条目添加到您在 SET DEBUG FILE 语句中指定了的文件。要查看调试条目,请使用任何文本编辑器来查看该输出文件。

下列列表包含前面的示例中函数生成的一些输出。每一被跟踪的语句之后是对它的内容的解释。
语句
操作
TRACE ON
回送 TRACE ON 语句。
TRACE Foreach starts
在此情况下,跟踪表达式,文字字符串 Foreach 开始。
start select cursor
提供打开游标来处理 FOREACH 循环的通知。
select cursor iteration
提供选择游标的每一迭代的开始的通知。
expression: (+lcount, 1)
对遇到的表达式 (lcount+1) 求值为 2。
let lcount = 2
以该值回送每一 LET 语句。