我假設你的問題與語句終結者有關(更容易看到你是否提供了你得到的實際錯誤)。我測試了以下,它的工作原理如下:
[ ... ]$ 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 [email protected] -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.
你的代碼有類似於一堆語法錯誤和未聲明的變量。如果你展示你的實際代碼而不是類似的東西,有人可能會提供類似於幫助的東西。 – mustaccio
實際的代碼,它非常接近上面的'類似'代碼 - BEGIN ATOMIC DECLARE INT DEFAULT 12; WHILE i> 0 DO INSERT INTO TEMP_ITERATIONS VALUES'IT'|| RTRIM(CHAR(COUNT)); SET COUNT = COUNT - 1; END WHILE; END – user455580
那麼,你聲明'我INT',但然後遞減'COUNT'在循環中 - 不知道我理解這裏的邏輯。 INSERT中的'VALUES'子句需要括號。我建議你閱讀手冊中的語法圖。 – mustaccio