在IBM i中使用RPGLE存储过程调用SQL查询数据并返回结果集

作者:佚名 上传时间:2023-05-29 运行软件:RPGLE 软件版本:V7R3M0 版权申诉

本示例代码演示了如何在IBM i (OS/400)操作系统上使用RPGLE存储过程调用SQL查询数据并返回结果集。通过本示例代码,可以灵活实现在IBM i上进行数据查询,方便进行后续业务处理。核心代码通过使用RPGLE语言中的相关函数来实现数据的查询和返回结果集操作。

// define module
ctl-opt Main(Directive:'OPTIONS(*SRCSTMT)');

dcl-pr SQLPrepare ExtProc('SQLPrepare');
  pstmt        pointer value
  stmt         char(32767) const options(*string)
  len          sqlu_int32 value
  endsqlext;
end-pr;

dcl-pr SQLExecute ExtProc('SQLExecute');
  pstmt        pointer value
  endsqlext;
end-pr;

dcl-pr SQLFetch ExtProc('SQLFetch');
  pstmt        pointer value
  endsqlext;
end-pr;

dcl-pr SQLNumResultCols ExtProc('SQLNumResultCols');
  pstmt        pointer value
  rc           sqlu_int16 value
  endsqlext;
end-pr;

// ...省略一些中间代码...

// main procedure
dcl-proc main;
  // declare variables
  dcl-s rc          sqlu_int16;
  dcl-s i           sqlu_int16;
  dcl-ds flds       likeds(QSYS/QADBXRFDS_t) dim(128);
  dcl-ds fldr       likeds(QSYS/QADBXREF_t);
  dcl-ds data       likeds(QSYS/QADBXRFDS_t) dim(1);
  dcl-ds col        likeds(QSYS/QADBXREF_t);
  dcl-s stmt       varchar(300);
  dcl-s error      varchar(500);
  dcl-s sqlca      SQLCA_t;
  dcl-s pstmt      pointer;
  dcl-s rows       sqlu_int32;

  // init variables
  stmt = 'SELECT * FROM MYTABLE';
  sqlca = *allx'00';

  // clear fields
  clear flds;
  clear fldr;
  clear data;

  // prepare statement
  pstmt = %alloc(%size(SQLDA));
  pstmt = SQLDA;
  callp SQLPrepare(pstmt: %addr(stmt): %len(stmt));

  // execute statement
  callp SQLExecute(pstmt);

  // get number of result columns
  rc = SQLNumResultCols(pstmt);

  // fetch result columns
  dow SQLFetch(pstmt) = 0;
    clear col;
    for i = 1 to rc;
      // get column information
      callp QDBRTVFD('MYLIB/MYTABLE': i: *omit: fldr);

      // copy values from field reference to column reference
      col.COLNAME = fldr.NAME;
      col.DATATYPE = fldr.TYPENAME;

      // get column value
      callp QDBRTVCI('MYLIB/MYTABLE': i: data: *omit: rows);
      col.COLVAL = data.FIELD;

      // add column to result set
      if %elem(rows) > 1;
        rows += 1;
      endif;
      flds(rows) = col;
    endfor;

    // process result set
    // ...省略一些中间代码...
  enddo;

  // clean up
  callp SQLFreeStmt(SQL_CLOSE);
  *inlr = *on;
end-proc;

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
IBM i使用RPGLE存储过程调用SQL查询数据返回结果
本示例代码演示了如何在IBM i (OS/400)操作系统上使用RPGLE存储过程调用SQL查询数据并返回结果集。通过本示例代码,可以灵活实现在IBM i上进行数据查询,方便进行后续业务处理。核心代码
V7R3M0
RPGLE
2023-05-29 18:09
PostgreSQL调用存储过程返回数据实例
主要介绍了PostgreSQL中调用存储过程并返回数据集实例,本文给出一创建数据表、插入测试数据、创建存储过程、调用创建存储过程和运行效果完整例子,需要的朋友可以参考下
PDF
70KB
2020-09-11 17:45
使用 SQL Server 存储过程查询数据返回结果
本示例代码展示了如何使用 SQL Server 存储过程来查询数据并返回结果集。通过将查询逻辑打包为存储过程,可以减少重复代码,并提高查询的性能和安全性。CREATE PROCEDURE [dbo]
SQL Server 2012 及以上版本
Microsoft SQL Server Management Studio
2023-05-24 15:51
IBM i(OS/400) 실행 SQL 查询返回结果
该示例代码实现在 IBM i(OS/400) 中使用 SQL 查询,并将结果集存储在数组中返回。代码注释清晰明了,包括连接数据库,执行查询,遍历结果集等。// 连接数据库$conn = db2_c
IBM i 7.3
PHP
2023-04-29 23:09
LINQ TO SQL存储过程返回结果
linqtosql存储过程,返回结果集。但结果集和多结果集。
DOCX
0B
2019-07-15 02:47
Oracle存储过程返回结果
该文档详细讲解Oracle在存储过程中如何利用Out参数返回一个结果集。示例简单易懂。
DOCX
0B
2019-01-20 22:12
delphi如何调用sql存储过程获取结果
delphi如何调用sql存储过程,并获取结果adostoredproc1.Close;adostoredproc1.ProcedureName:='sp_thchl';adostoredproc1.
TXT
0B
2019-09-06 07:23
Delphi调用oracle的存储过程返回数据
介绍了Delphi中调用oracle的存储过程返回数据集的各种方法
DOCX
0B
2019-05-27 18:54
C#调用oracle存储过程返回数据
C#中调用oracle存储过程返回数据集
RAR
0B
2019-05-31 18:32
Oracle返回结果存储过程分享
Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的
PDF
34KB
2020-12-03 04:03