IBM DB2 Control Loop
Я перехожу с MS SQL Server на IBM DB2 (Версия 9.7). Попытка написать составной SQL While Loop с локальными переменными (не является частью хранимой процедуры), что-то вроде -
BEGIN ATOMIC
DECLARE i INT DEFAULT 12;
WHILE i > 0
"DO ....";
SET COUNT = COUNT - 1;
END WHILE;
END
Но я получаю ошибку только в первой строке для объявления переменных-
SQL0104N An unexpected token "12" was found following "ECLARE I INT DEFAULT". Expected tokens may include: "END-OF-STATEMENT"
Любая помощь с благодарностью.
1 ответ
Решение
Я предполагаю, что ваша проблема связана с оператором терминатора (проще увидеть, если вы предоставите реальные ошибки, которые вы получаете). Я проверил следующее, и это сработало:
[ ... ]$ cat aa.sql
CREATE TABLE TEMP_ITERATIONS ( X VARCHAR(50) ) @
BEGIN ATOMIC
DECLARE i INT DEFAULT 12;
WHILE i > 0 DO
INSERT INTO TEMP_ITERATIONS VALUES ('IT'|| RTRIM(CHAR(i)));
SET i = i - 1;
END WHILE;
END @
[ ... ]$ db2 -td@ -f aa.sql
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
[ ... ]$ db2 "select * from TEMP_ITERATIONS"
X
--------------------------------------------------
IT12
IT11
IT10
[...]
12 record(s) selected.
Здесь я использовал @ как терминатор оператора с тех пор; имеет особое значение. Если вы не хотите изменять терминатор оператора, хитрость заключается в том, чтобы "скрыть"; внутри составного оператора, добавив комментарий в конце строки:
[ ... ]$ cat aa.sql
CREATE TABLE TEMP_ITERATIONS ( X VARCHAR(50) ) ;
BEGIN ATOMIC
DECLARE i INT DEFAULT 12; --
WHILE i > 0 DO
INSERT INTO TEMP_ITERATIONS VALUES ('IT'|| RTRIM(CHAR(i))); --
SET i = i - 1; --
END WHILE; --
END ;
[ ... ] db2 -tf aa.sql
DB20000I The SQL command completed successfully.
DB20000I The SQL command completed successfully.
[ ... ]$ db2 "select * from TEMP_ITERATIONS"
X
--------------------------------------------------
IT12
IT11
IT10
[...]
12 record(s) selected.