Error in timestamp format 无效的时间戳格式被传送到 JDBC 转义子句。该时间戳字符的转义子句具有以下格式:{ts 'yyyy-mm-dd hh:mm:ss.f...'}。
WHILE 与 FOR 语句都可在 SPL 例程中创建执行循环。WHILE 循环以 WHILE condition 开始,只要条件为真就执行语句块,并以 END WHILE 结束。 下图展示有效的 WHILE 条件。只要在 WHILE 语句中指定的条件为真,例程就执行 WHILE 循环。 图: 只要在 WHILE 语句中指定的条件为真,例程就执行 WHILE 循环。 CREATE PROCEDURE test_rows( num INT )
DEFINE i INTEGER; LET i = 1;
WHILE i < num INSERT INTO table1 (numbers) VALUES (i); LET i = i + 1; END WHILE;
END PROCEDURE; 前图中的 SPL 例程接受整数作为参数,然后在它每一次执行 WHILE 循环时,就将整数 值插入到 table1 的 numbers 列内。插入的值从 1 开始,且增大到 num - 1。 请当心,不要创建无限的循环,如下图所示。 图: 接受整数为参数,然后将整数值插入到 numbers 列的例程。 CREATE PROCEDURE endless_loop()
DEFINE i INTEGER; LET i = 1;
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 286 -
WHILE ( 1 = 1 ) -- don't do this! LET i = i + 1; INSERT INTO table1 VALUES (i); END WHILE;
END PROCEDURE; FOR 循环从 FOR 语句扩展到 END FOR 语句, 并执行在 FOR 语句中定义的指定次数的 迭代。下图展示在 FOR 循环中定义迭代的几种方式。 对于 FOR 循环的每一迭代,重置迭代变量(在后面的示例中声明为 i),并以该变量的新 值执行该循环内的语句。 图: 定义 FOR 循环中的迭代。 FOR i = 1 TO 10 . . . END FOR;
FOR i = 1 TO 10 STEP 2 . . . END FOR;
FOR i IN (2,4,8,14,22,32) . . . END FOR;
FOR i IN (1 TO 20 STEP 5, 20 to 1 STEP -5, 1,2,3,4,5) . . . END FOR: 在第一个示例中,只要 i 介于 1 之间 10,包括 1 与 10,该 SPL 过程就执行 FOR 循环。 在第二个示例中,i 从 1 到 3、5、7,等等递进,但从不超过 10。第三个示例检查 i 是否在 定义了的值集之内。 在第四个示例中, 当 i 为 1、 6、 11、 16、 20、 15、 10、 5、 1、 2、 3、 4 或 5 时, 该 SPL 过程执行循环——换言之,执行循环 13 次。 提示: WHILE 循环与 FOR 循环之间的主要差异是,FOR 循环保证会结束,但 WHILE 循环 不然。FOR 语句指定循环执行的确切次数,除非语句导致例程退出该循环。使用 WHILE,可 能创建无限的循环。