DB@ SQL 使用带有标记的 Values/Into 的动态 SQL

问题描述 投票:0回答:1

尝试使用 value/into 和 select 内的标记来执行动态 sql

    DCL-DS GroupDS;
   wGrpSOAId  Packed(7:0);
   wAttach    Packed(7:0);
   wNotAttach Packed(7:0);
End-Ds;   

wFrom1 = 'FROM TBL1.ADD';
//Build 'Group counts' SQL statements
wSQL1 = 'SELECT ID, ' +
         ' sum(Case when status=''A'' then 1 else 0 end), ' +
         ' sum(Case when status=''R'' then 1 else 0 end) ' +
         ' INTO :GroupDS '
         + %Trim(wFrom1) +
         ' WHERE ID = ? ' +
         ' GROUP BY ID'''

Exec Sql prepare @GrpSql from :wSQL1;
Exec Sql Execute @GrpSql using :wID;

是否可以将此查询放入values/into? 类似于 VALUES(wSQL1 或实际选择) INTO ?,?,?

我还没有找到任何这样的例子,还是我需要使用光标?

sql dynamic rpgle
1个回答
0
投票

SELECT ... INTO
无法动态准备...

但是,

VALUES ... INTO
可以。

这应该很接近...

DCL-DS GroupDS;
   wGrpSOAId  Packed(7:0);
   wAttach    Packed(7:0);
   wNotAttach Packed(7:0);
End-Ds;   

wFrom1 = 'FROM TBL1.ADD';
//Build 'Group counts' SQL statements
wSQL1 = 'VALUES (' +
         ' SELECT ID, ' +
         ' sum(Case when status=''A'' then 1 else 0 end), ' +
         ' sum(Case when status=''R'' then 1 else 0 end) ' +
         + %Trim(wFrom1) +
         ' WHERE ID = ? ' +
         ' GROUP BY ID' +
         ' ) INTO ?';

Exec Sql prepare @GrpSql from :wSQL1;
//should be checking SQLSTATE/SQLCODE
Exec Sql Execute @GrpSql using :wID, :GroupDS;
//should be checking SQLSTATE/SQLCODE
© www.soinside.com 2019 - 2024. All rights reserved.