我们需要从 .NET (C#) 连接到 AS/400 并访问(读取和写入)数据。
问题是数据存储在大型机上的关系文件中,而不是 DB2 数据库中。
实现这一目标的最佳方法是什么?我很想使用 ADO.NET 实体框架类型解决方案,但我相信兼容的数据提供程序仅适用于 DB2。
我们需要从基于 IBM AS400 的 rpg/iseries 程序访问 https api。
为了尝试这个,我们安装了“Mocha W32 TN5250”,但无法连接到会话。
是否可以从基于 IBM AS400 的 rpg/iseries 程序进行 https 调用?
有人知道 DB2 for i (V6r1) 是否支持类似的东西
INSERT ON DUPLICATE KEY UPDATE.
Run Code Online (Sandbox Code Playgroud)
我需要使用连接进行更新,但不想使用子查询。
我正在尝试为可包含数百万行(每月最多 300 万行)的 iSeries 数据库表进行最佳 SQL 查询。每行的唯一键是其 RRN(相对记录号,即该行的物理记录号)。
我的目标是将表格与另一个小表格连接起来,为我提供其中一个数字列的文字描述。但是,涉及的行数可能超过 200 万,这通常会导致查询因内存不足而失败。所以我想重写查询以避免将大子集与任何其他表连接。因此,我们的想法是在给定月份内选择一个页面(最多 30 行),然后将该子集连接到第二个表。
然而,我遇到了一个奇怪的问题。我使用以下查询来检索我想要的页面行的 RRN:
select t.RRN2 -- Gives correct RRNs
from (
select row_number() over() as SEQ,
rrn(e2) as RRN2, e2.*
from TABLE1 as e2
where e2.UPDATED between '2013-05-01' and '2013-05-31'
order by e2.UPDATED, e2.ACCOUNT
) as t
where t.SEQ > 270 and t.SEQ <= 300 -- Paging
order by t.UPDATED, t.ACCOUNT
Run Code Online (Sandbox Code Playgroud)
这个查询工作得很好,返回了我需要的行的正确 RRN。但是,当我尝试将子查询的结果与另一个表连接时,RRN 发生了变化。因此,我将查询简化为简单外部查询中的子查询,没有任何联接:
select rrn(e) as RRN, e.*
from TABLE1 as e
where …Run Code Online (Sandbox Code Playgroud) 我的任务是找到一种将数据迁移到 DB2 AS400 数据库的方法。当在前端输入数据(当前是手动)时,系统会进行一些计算并将结果插入表中。
我的理解是它使用触发器来执行此操作。我对这些东西不太了解,但我已经编写了代码来直接将值插入到同一个表中。有没有办法让我弄清楚当用户手动输入数据时正在触发什么触发器?
我查看了 QSYS2/SYSTRIGGERS,除了对我来说没有多大意义之外,我没有看到属于包含我的表的 SCHEMA 的触发器。
这里的任何帮助都会很棒,因为我被困住了。
我正在寻找从rpgle.I 中的子过程返回多个值(如数组)的方法。我不想使用文件等来存储这个值。有人可以推荐任何好的方法来实现这一目标吗?
我创建了一个数据结构数组,我想根据组合键进行查找。即在下面的 DS 中,如果 tblName 和 tblElement 和 tblDivision 匹配,我想查找并获取索引,然后返回 tblRes 值。
D TblAryDs DS qualified dim(9999)
D tblName 3
D tblElement 10
D tblDivision 5
D tblRes 2
//Not Sure How to do the below lookup
idx = %lookup(tblName:TblAryDs(*).tblName) && %lookup(tblElement:TblAryDs(*).tblElement) && %lookup(tblDivision:TblAryDs(*).tblDivision);
if idx > *zeros;
return TblAryDs(*).tblRes;
endif;
Run Code Online (Sandbox Code Playgroud) 我正在使用“创建表...”等创建 sql/ddl 描述的表。
如何向表/文件添加文本/描述?当您处理 dds 文件时,它只会调整源成员中的文本。
我有这段代码。
IF COND(%TRIM(&BLANK_VAR) *EQ '') THEN(DO)
CALL PGM(MY_PROGRAM) PARM(&BLANK_VAR)
ENDDO
Run Code Online (Sandbox Code Playgroud)
我想检查是否&BLANK_VAR是空字符串。但是,由于错误消息,我的程序无法编译:
* CPD0126 30 Operand not valid or operator missing in COND.
Run Code Online (Sandbox Code Playgroud)
这是一个问题%TRIM吗?我尝试使用%LEN但它给了我声明的变量的长度,而不是里面的实际数据。
&BLANK_VAR长度为 10 个字符。我是否必须这样做:
IF COND(&BLANK_VAR *EQ ' ')
Run Code Online (Sandbox Code Playgroud) 我在 COBOL 中使用 QCMDEXC 来执行 QShell 命令,如下所示:
01 PROGRAM-VARIABLES.
05 CL-CMD PIC X(33)
VALUE "STRQSH CMD('LS')".
05 PACK-VAL PIC 9(10)V9(5) COMP-3
VALUE 16.
MAINLINE.
CALL "QCMDEXC" USING CL-CMD PACK-VAL.
Run Code Online (Sandbox Code Playgroud)
LS 正在执行,结果显示在屏幕上。但是,我找不到任何地方或想出一种读取输出的方法,在这种情况下,将“unix”中的文件/文件夹列表再次转换为 COBOL。(我验证了 COBOL 正确启动了该命令,因为如果我通过 STRQSH CMD('LS>fromcobol.txt') 更改它,则会使用正确的输出创建文件 'fromcobol.txt',但我不知道如何将该输出检索到同一个 COBOL 程序中......我对 COBOL 非常无知,我今天开始学习,我花了很长时间才启动命令......)
非常感谢您的帮助...