SQL FETCH、游标和 RPG
SQL FETCH, Cursors and RPG
我不确定我的代码有什么问题,我正在尝试创建一个 while 循环,该循环将使用 SQL 中声明的游标获取字段(代码)中的下一个字符。目标是通过循环获取下一个匹配的字符。然后我想要 return 循环结束时的结果。如果没有完全匹配,目标是对代码进行部分匹配。我以前从未使用过游标,所以我尝试尽可能多地学习有关使用 fetch 和游标的知识。
EXEC SQL
SELECT field FROM file
WHERE field = :code
UNION
DECLARE UserInput CURSOR FOR
SELECT field FROM file
WHERE field LIKE '%' || :code || '%'
ORDER BY field ASC
OPEN UserInput
FETCH NEXT FROM UserInput
BEGIN
DO WHILE <> %EOF
FETCH NEXT FROM UserInput
END
CLOSE UserInput
DEALLOCATE UserInput;
哇...这里有很多错误...
快速浏览...
- 您试图在错误的位置声明光标。
%EOF()
适用于 RPG 记录级别访问,您需要检查
SQL代码或SQL状态
FETCH
OPEN
都是SQL语句,需要在一个EXEC SQL
DEALLOCATE
不需要
- 需要
FETCH
从游标到RPG变量的行
看看这段代码:
EXEC SQL
DECLARE UserInput CURSOR FOR
SELECT field FROM file
WHERE field = :code
UNION
SELECT field FROM file
WHERE field LIKE '%' || :code || '%'
ORDER BY field ASC;
EXEC SQL
OPEN UserInput;
--really should check SQLSTATE here too!
EXEC SQL
FETCH NEXT FROM UserInput INTO :MyRpgVar;
Dow SQLSTATE = '00000';
--note 00000 = no errors or warning
-- 02000 = no data
<do somthing?>
EXEC SQL
FETCH NEXT FROM UserInput INTO :MyRpgVar;
ENDDO;
EXEC SQL
CLOSE UserInput;
我建议您阅读嵌入式SQL编程参考的RPGLE部分。
我不确定我的代码有什么问题,我正在尝试创建一个 while 循环,该循环将使用 SQL 中声明的游标获取字段(代码)中的下一个字符。目标是通过循环获取下一个匹配的字符。然后我想要 return 循环结束时的结果。如果没有完全匹配,目标是对代码进行部分匹配。我以前从未使用过游标,所以我尝试尽可能多地学习有关使用 fetch 和游标的知识。
EXEC SQL
SELECT field FROM file
WHERE field = :code
UNION
DECLARE UserInput CURSOR FOR
SELECT field FROM file
WHERE field LIKE '%' || :code || '%'
ORDER BY field ASC
OPEN UserInput
FETCH NEXT FROM UserInput
BEGIN
DO WHILE <> %EOF
FETCH NEXT FROM UserInput
END
CLOSE UserInput
DEALLOCATE UserInput;
哇...这里有很多错误... 快速浏览...
- 您试图在错误的位置声明光标。
%EOF()
适用于 RPG 记录级别访问,您需要检查 SQL代码或SQL状态FETCH
OPEN
都是SQL语句,需要在一个EXEC SQL
DEALLOCATE
不需要- 需要
FETCH
从游标到RPG变量的行
看看这段代码:
EXEC SQL
DECLARE UserInput CURSOR FOR
SELECT field FROM file
WHERE field = :code
UNION
SELECT field FROM file
WHERE field LIKE '%' || :code || '%'
ORDER BY field ASC;
EXEC SQL
OPEN UserInput;
--really should check SQLSTATE here too!
EXEC SQL
FETCH NEXT FROM UserInput INTO :MyRpgVar;
Dow SQLSTATE = '00000';
--note 00000 = no errors or warning
-- 02000 = no data
<do somthing?>
EXEC SQL
FETCH NEXT FROM UserInput INTO :MyRpgVar;
ENDDO;
EXEC SQL
CLOSE UserInput;
我建议您阅读嵌入式SQL编程参考的RPGLE部分。