我作为RPG400程序员工作了8年.由于我在非AS400项目中担任项目经理,因此过去2 - 3年没有做太多编程.
现在我打算学习OOP编程技巧并继续编程.
寻找你的帮助来决定我应该学习Java或.Net的语言?
什么应该是我的起点..首先学习OOP然后继续学习任何一种语言?
实际上我有2个表table1和table2
表格1
name
city
addr.
Run Code Online (Sandbox Code Playgroud)
表2
name
city
addr.
ph.no
Run Code Online (Sandbox Code Playgroud)
现在ph.no字段是表2中的额外字段
所以我想在table1上的select查询输出中显示字段ph.no,默认值为12345,因为我想将该输出附加到outfile中.帮帮我..我正在使用db2 as400数据库
我有一个C#.NET应用程序,必须能够更改IBM System i(iSeries/AS400)计算机上的用户密码.我目前正在使用以下代码使用IBM专有的cwbx.dll执行此操作.
using cwbx;
public void ChangePassword(string system, string user, string currentPassword, string newPassword)
{
AS400System as400 = new AS400System();
as400.Define(system);
try
{
as400.ChangePassword(user, currentPassword, newPassword);
}
finally
{
as400.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但迫使我(以及应用程序的所有用户)对cwbx.dll采取专有依赖.我想消除这种依赖.
有没有办法使用类似于MS SQL Server alter login机制的SQL更改密码?
我知道我可以使用IBM.Data.DB2.iSeries .NET数据提供程序通过使用以下代码从SQL 集成DB2通用数据库for iSeries与iSeries与Microsoft ADO .NET调用程序来实现此目的.
/// <summary>
/// Call a program directly on the iSeries with parameters
/// </summary>
public string CallPgm(string cmdtext)
{
string rc = " ";
// Construct a string …Run Code Online (Sandbox Code Playgroud) 我有以下声明:
SELECT DISTINCT COUNT(Z.TITLE) AS COUNT
FROM QMFILES.MPRLRREQDP Y,
QMFILES.MPRLRTYPP Z
WHERE Y.REQUEST_TYPE = Z.ID
AND Y.REQUEST_ID = 13033;
Run Code Online (Sandbox Code Playgroud)
在此特定结果集上,如果我删除DISTINCT并且COUNT()结果集将返回完全相同数据的九行.如果我添加DISTINCT,我会得到一行.添加COUNT()我得到九个结果,我期待一个.我假设操作的顺序正在影响我的结果,但我怎么能解决这个问题,所以我得到了我想要的结果?
注意:这是较大的SQL语句中的子选择.
使用来自著名的学概念IBM红纸在RPG异常和错误处理,我已经写了一个服务程序QGPL/ERRFUNC实现像可重用的错误功能Assert,Throw,ThrowMsg,Rethrow,和GetErrorMsg.我一直在几个不同的程序中使用它们,并且它们一直运行良好.
刚才,我Throw在RPG ILE程序中使用了该函数,该程序还静态调用access与IFS文件系统上的流文件一起使用的C风格函数.该程序将无法使用"为符号Throw多次提供定义"的绑定错误进行编译.据我所知,使用编译时你不能绑定细节CRTBNDRPG的命令,但我无法评论我的H DFTACTGRP(*NO)规格,然后编译使用CRTRPGMOD,随后CRTPGM与附加参数DETAIL(*EXTENDED).这将打印出一个广泛的列表,列出了编译器在确定静态绑定到哪些过程时所查看的所有过程名称.这揭示了"投掷"的双重定义.在72页面列表的深处,QJVAJNI引用了IBM提供的服务程序(Java Native Interface),它包含一个名为"Throw"的导出过程.
现在最简单的解决方法就是简单地重命名我的"Throw"程序,修改并重新编译我的服务程序,然后修改并重新编译引用它的所有程序.我可能会遵循这个解决方案,但这种行为引发了一些令人不安的问题:
为什么C风格的IFS函数使用Java本机接口来完成其工作?我看到的像服务计划进口QC2IFS和QC2POSIX那完全意义的上下文.看起来IBM在这里引入了一个我们不得不忍受的意外依赖.我确定它是引用它的C服务程序之一,QJVAJNI因为当我注释掉access函数调用时,QJVAJNI不会引用它.QJVAJNI服务程序的引用可能是多层深度,这意味着导入导入的导入.
为什么粘合剂通过服务程序导入如此彻底地递归?绑定器看起来像遍历每个服务程序使用的每个导入,无论该程序是否使用该导入以及绑定的子过程.这有必要吗?是否可以递归检查每个级别使用的导入?有没有办法改变这种行为?
如果对于上述两个问题没有什么可以做的,这是否意味着为了保证绑定始终有效(特别是对于"通用"函数,如错误处理),必须确保没有任何其他导出过程在同一台机器上的任何地方?我不知道任何像名称空间这样的设施可以缓解这个问题.据我所知,ILE编译器不使用其他平台在这种情况下可能使用的任何方法,如重载或名称修改.开始"非正式命名空间"是一种很好的做法,就像我可以看到一些C导出(例如_C_NEU_IFS_feof)以防止名称冲突一样?或者,有没有办法在发布服务程序之前搜索计算机上的所有导出过程以查找所需的名称?
IBM红皮书的作者是ILE编程领域的一些重量级人物.他们像我一样命名了他们推荐的出口之一"投掷"(尽管有不同的参数列表).他们遇到了类似的问题吗?他们有不同的方法来解决名称冲突吗?
我发现有*DUPPROC一个可以指定的选项CRTPGM,但我不确定这是个好主意.文档说"当允许多个重复过程时,与导入请求匹配的指定模块和服务程序列表中的第一个导出过程是所选的过程." 你能确定哪个符号将成为列表中的第一个吗?订单是否严格定义?
我有一系列ASCII平面文件从大型机进来,由C#应用程序处理.引入了一个带有Packed Decimal(COMP-3)字段的新Feed,需要将其转换为数值.
使用ASCII传输模式通过FTP传输文件.我担心二进制字段可能包含将被解释为非常低的ASCII代码或控制字符而不是值 - 或者更糟糕的是,可能在FTP进程中丢失.
更重要的是,字段被读作字符串.我可以灵活地解决这个问题(即某种流),但业务会给我带来阻力.
该要求为"从HEX转换为ASCII",但显然没有产生正确的值.任何帮助,将不胜感激; 只要您能够解释转换过程的逻辑,它就不必是特定于语言的.
我正在处理两个表之间的连接条件,其中一个要匹配的列是值的连接.我需要将tableA中的columnA加入tableB中columnB的前2个字符.
我已经开发了两个不同的语句来处理这个问题,我试图分析每种方法的性能.
方法1:
ON tB.columnB like tA.columnA || '%'
Run Code Online (Sandbox Code Playgroud)
方法2:
ON substr(tB.columnB,1,2) = tA.columnA
Run Code Online (Sandbox Code Playgroud)
与方法2相比,查询执行计划使用方法1的步骤少得多,但是,方法2的执行速度要快得多.此外,执行计划显示方法2的建议索引,可以提高其性能.
我在IBM iSeries上运行它,虽然对一般意义上的答案感兴趣,以了解有关sql查询优化的更多信息.
方法2执行得更快是否有意义?
这个问题类似,但看起来没有人对这些方法的性能差异提供任何具体的答案: LEFT()与LIKE运算符之间的T-SQL速度比较.
PS:需要这种类型的连接的表设计不是我此时可以更改的内容.我意识到将具有不同类型数据的字段分开是可取的.
在DB2 V5R4中,当您修改DETERMINISTIC UDF的功能时它会返回缓存的响应一段时间...
有没有办法重置缓存的响应?
提前致谢.
我试图从另一个表中的另一个字段更新表中的字段.
正在更新的表将具有多个记录,这些记录需要从另一个表中的1个匹配进行更新.
例如,我有一百万行销售历史文件.这些百万条记录有大约40,000个不同的sku代码,每行有一个日期和时间戳.每个sku都会有多个记录.
我添加了一个名为MATCOST的新字段(材料成本).
我有第二个包含SKU和MATCOST的表.
所以我想用表2中相应的SKU的MATCOST标记表1中的每一行.当它不是一对一的关系时,我似乎无法实现这一点.
这是我尝试过的:
update
aulsprx3/cogtest2
set
matcost = (select Matcost from queryfiles/coskitscog where
aulsprx3/cogtest2.item99 = queryfiles/coskitscog.ITEM )
where
aulsprx3/cogtest2.item99=queryfiles/coskitscog.ITEM
Run Code Online (Sandbox Code Playgroud)
但这会导致SQL错误:列限定符或表COSKITSCOG未定义并突出显示最后一个对queryfiles/coskitscog.Item的引用中的q
有任何想法吗 ?
最亲切的问候
亚当
更新:这是我的表原则上的样子.1表包含销售数据,另一个包含销售商品的MATCOSTS.我需要使用COSKITCOG表中的数据更新Sales Data表(COGTEST2).我不能使用coalesce语句,因为它不是1对1关系,我使用的大多数选择函数都会导致多次选择的错误.唯一匹配的字段是Item = Item99
我找不到匹配多个的方法.在示例中,我们必须使用3个SQL语句,并只指定项目代码.但在现场我有大约40,000个物品代码和超过一百万个销售数据记录要更新.如果SQL不这样做,我想我必须尝试在RPG程序中编写它,但这暂时超出了我的范围.
感谢您的任何帮助,您可以提供.

使用ILE编译器,在RPG中,您可以使用PSDS获取有关当前用户,作业名称等的信息.
如何使用ILE在C++程序中获得相同的信息?
ibm-midrange ×10
sql ×5
db2 ×4
.net ×2
c# ×2
rpgle ×2
comp-3 ×1
db2-400 ×1
flat-file ×1
ile-c++ ×1
java ×1
oop ×1
optimization ×1
passwords ×1
sql-update ×1