无法从 sqlrpgle SQL 查询中获取数据
Unable to fetch data from an sqlrpgle SQL query
我正在尝试 运行 在我的 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, 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, asgrp, asind,
asran3, assecu, asscle,
asnom, aspre, asnom,
aspre, asnais, asnaia,
asnaim, asnaij, asrsec,
aseffs, aseffa, aseffm,
aseffj, asrads, asrada,
asradm, asradj, asctns
FROM QPURGE.SASSURE
WHERE ASSECU = :x1secu) 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;
似乎没有任何效果,我使用调试器获取了一个样本,看看我的请求是否符合我的要求 returns 并且确实如此。
我真的对这个没想法..
有什么想法吗?
请注意,您可以在此处使用 SELECT INTO
而不是 VALUES INTO
,因为您使用的是静态 SQL 而不是动态 SQL。
无论哪种情况,请注意 select 语句的结果必须 return 一行。否则你会得到一个 SQLSTATE=21000(如果我没记错的话)。如果你需要 rad 多行,你必须使用游标。
您必须在 运行 嵌入 SQL 后检查 SQLSTATE(或 SQLCODE)。
SQLSTATE --> description
'00000'
--> unqualified success
'01xxx'
--> successful with warnings
'02000'
--> no data
您应该能够使用游标中的数据结构作为 SELECT INTO
VALUES INTO
或 FETCH
的 return 变量。
SELECT asste, asgrp, asind,
asran3, assecu, asscle,
asnom, aspre, 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) 的指示器数组,以便每个 returned 列都有一个空指示器标志。
我正在尝试 运行 在我的 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, 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, asgrp, asind,
asran3, assecu, asscle,
asnom, aspre, asnom,
aspre, asnais, asnaia,
asnaim, asnaij, asrsec,
aseffs, aseffa, aseffm,
aseffj, asrads, asrada,
asradm, asradj, asctns
FROM QPURGE.SASSURE
WHERE ASSECU = :x1secu) 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;
似乎没有任何效果,我使用调试器获取了一个样本,看看我的请求是否符合我的要求 returns 并且确实如此。
我真的对这个没想法..
有什么想法吗?
请注意,您可以在此处使用 SELECT INTO
而不是 VALUES INTO
,因为您使用的是静态 SQL 而不是动态 SQL。
无论哪种情况,请注意 select 语句的结果必须 return 一行。否则你会得到一个 SQLSTATE=21000(如果我没记错的话)。如果你需要 rad 多行,你必须使用游标。
您必须在 运行 嵌入 SQL 后检查 SQLSTATE(或 SQLCODE)。
SQLSTATE --> description
'00000'
--> unqualified success
'01xxx'
--> successful with warnings
'02000'
--> no data
您应该能够使用游标中的数据结构作为 SELECT INTO
VALUES INTO
或 FETCH
的 return 变量。
SELECT asste, asgrp, asind,
asran3, assecu, asscle,
asnom, aspre, 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) 的指示器数组,以便每个 returned 列都有一个空指示器标志。