如何解决无法从 sqlrpgle SQL 查询中获取数据
我正在尝试在我的 RPG 程序中运行 SQL 查询,但是我无法将结果提取到我的变量(数据结构)中。
这是我迄今为止尝试过的代码。
Dsassure DS QUALIFIED
Dasnste 1a
Dasngrp 4s 0
Dasnind 5s 0
Dasnra3 1s 0
Dasnnss 13a
Dasncss 2s 0
Dasnreg 2s 0
Dasnorg 3s 0
Dasncen 3s 0
Dasnclo 1s 0
Dasnpmu 1a
Dasnnoa 25a
Dasnpra 15a
Dasnnob 25a
Dasnprb 15a
Dasnnas 2s 0
Dasnnaa 2s 0
Dasnnam 2s 0
Dasnnaj 2s 0
Dasnrng 1s 0
Dasnefs 2s 0
Dasnefa 2s 0
Dasnefm 2s 0
Dasnefj 2s 0
Dasnras 2s 0
Dasnraa 2s 0
Dasnram 2s 0
Dasnraj 2s 0
Dasnctn 1a
Dasnnmu 8s 0
Dasnst3 3a
//*-----------------------------------------------------------------
C *ENTRY PLIST
C PARM x1secu 13
C PARM x1reg 2 0
C PARM x1caisse 3
C PARM x1datea 2 0
C PARM x1datem 2 0
C PARM x1datej 2 0
C/exec sql
C+ set option commit=*none,C+ datfmt=*iso
C/end-exec
*
/Free
//*-----------------------------------------------------------------
exec sql
DECLARE c1 CURSOR FOR
SELECT asste,asgrp,asind,asran3,assecu,asscle,asnom,aspre,asnais,asnaia,asnaim,asnaij,asrsec,aseffs,aseffa,aseffm,aseffj,asrads,asrada,asradm,asradj,asctns
FROM QPURGE.SASSURE
WHERE ASSECU = :x1secu;
exec sql
OPEN c1;
If SQLSTATE = '00000';
exec sql
FETCH c1 INTO
:sassure.asnste,:sassure.asngrp,:sassure.asnind,:sassure.asnra3,:sassure.asnnss,:sassure.asncss,:sassure.asnraj,:sassure.asnnoa,:sassure.asnpra,:sassure.asnnob,:sassure.asnprb,:sassure.asnnas,:sassure.asnnaa,:sassure.asnnam,:sassure.asnnaj,:sassure.asnrng,:sassure.asnefs,:sassure.asnefa,:sassure.asnefm,:sassure.asnefj,:sassure.asnras,:sassure.asnraa,:sassure.asnram,:sassure.asnctn;
exec sql
CLOSE c1;
我尝试使用数据结构作为 INTO 目标,但没有奏效。
FETCH c1 INTO :sassure;
我也尝试在没有光标的情况下执行此操作,指定子字段
VALUES (SELECT asste,asctns
FROM QPURGE.SASSURE
WHERE ASSECU = :x1secu) INTO
:sassure.asnste,:sassure.asnctn;
似乎没有任何效果,我使用调试器获取了一个示例,然后查看我的请求是否返回了任何内容,并且确实如此。
我真的对这个没有想法..
有什么想法吗?
解决方法
请注意,您可以在此处使用 SELECT INTO
而不是 VALUES INTO
,因为您使用的是静态 SQL 而不是动态 SQL。
无论哪种情况,请注意 select 语句的结果必须返回单行。否则你会得到一个 SQLSTATE=21000(如果我没记错的话)。如果您需要绘制多于一行,则必须使用游标。
您必须在运行嵌入式 SQL 后检查 SQLSTATE(或 SQLCODE)。
SQLSTATE --> 描述'00000'
--> 不合格的成功'01xxx'
--> 成功但有警告'02000'
--> 无数据
您应该能够使用该数据结构作为 SELECT INTO
VALUES INTO
或 FETCH
从游标的返回变量。
SELECT asste,asgrp,asind,asran3,assecu,asscle,asnom,aspre,asnais,asnaia,asnaim,asnaij,asrsec,aseffs,aseffa,aseffm,aseffj,asrads,asrada,asradm,asradj,asctns
INTO :sassure
FROM QPURGE.SASSURE
WHERE ASSECU = :x1secu;
请注意,如果任何值可能为 NULL,则您需要一个带有 DIM(24) 的指示符数组,以便每个返回的列都有一个空指示符标志可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。