我试图从iSeries(AS/400)上的DB2中的查询结果创建一个分隔字符串.我在T-SQL中完成了这个,但是在这里找不到办法.
这是我在T-SQL中的代码.我正在寻找DB2中的equivelant.
DECLARE @a VARCHAR(1000)
SELECT @a = COALESCE(@a + ', ' + [Description], [Description])
FROM AP.Checkbooks
SELECT @a
Run Code Online (Sandbox Code Playgroud)
如果我表中的描述如下所示:
说明1
说明2
说明3
然后它会返回:
描述1,描述2,描述3
我对iseries/DB2不太熟悉.但是,我在一个使用它作为主数据库的网站上工作.
最近在现有表中添加了一个新列.当我通过AS400查看它时,我看到以下数据类型:
Type: S
Length: 9
Dec: 2
Run Code Online (Sandbox Code Playgroud)
这告诉我这是一个数字字段,小数点前有6位数字,小数点后2位数字.
当我使用简单的SELECT(SELECT MYCOL FROM MYTABLE)查询数据时,我会毫无问题地返回所有记录.然而,当我尝试使用DISTINCT,GROUP BY或ORDER BY在同样的专栏中,我得到以下异常:
[SQL0802] Data conversion of data mapping error
Run Code Online (Sandbox Code Playgroud)
我推断出至少有一条记录有无效数据 - 我的DBA称之为"空白"或"4 O".这怎么可能呢?当尝试将无效数据添加到该列时,数据库是否应该抛出异常?
有什么方法可以解决这个问题,例如在我的查询中过滤掉那些不良记录吗?
有没有人能够在IBM i上成功安装node-sass?
我目前正在运行Node 6.9.1,并且能够安装许多npm软件包.但是,@ angular/cli依赖于node-sass,显然,node-sass有一个编译组件让我很难安装.
我的第一个问题与能够下载二进制文件本身有关 - 由于我们的网络设置,IBM i无法从以下位置下载二进制文件:
https://github.com/sass/node-sass/releases/download/v4.5.2/aix-ppc-48_binding.node
我收到超时错误.我能够通过将SASS_BINARY_SITE更改为非https版本来解决这个问题:
export SASS_BINARY_SITE='http://github.com/sass/node-sass/releases/download'
Run Code Online (Sandbox Code Playgroud)
但是,现在,即使二进制下载成功,当npm尝试测试二进制文件时,我会收到以下错误:
测试二进制二进制有一个问题:错误:无法加载模块/QOpenSys/QIBM/ProdData/OPS/Node6/lib/node_modules/node-sass/vendor/aix-ppc-48/binding.node.该模块具有无效的幻数.
Run Code Online (Sandbox Code Playgroud)at Error (native) at Object.Module._extensions..node (module.js:597:18) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at module.exports (/QOpenSys/QIBM/ProdData/OPS/Node6/lib/node_modules/node-sass/lib/binding.js:19:10) at Object.<anonymous> (/QOpenSys/QIBM/ProdData/OPS/Node6/lib/node_modules/node-sass/lib/index.js:14:35)
然后npm尝试在本地构建二进制文件,但由于Python2在此计算机上不可用而失败.我可以请求安装Python2,这在我们的环境中是一个漫长的过程,但在我继续关注那个兔子洞之前,我想知道实际上是否可以让node-sass工作,如果是的话,是否还有另一个二进制,我可以指向npm install使用而不是.
或者,是否有另一种获取node-sass工作的方法?
我作为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数据库
我正在使用旧的IBM iSeries(IBM-i,i5OS,AS/400等),在O/S版本V5R3M0上使用Java 5 JVM(Classic,而不是ITJ J9).
简而言之,这是一个场景:
这一切都按预期工作.
但是,当我运行JVM时,正确配置指向商店并提供密码(我过去使用在Portecle中创建的自签名证书进行测试),并尝试在443上启动我的Web服务器,我收到以下安全异常:
java.security.KeyStoreException: Cannot store non-PrivateKeys
Run Code Online (Sandbox Code Playgroud)
谁能告诉我哪里出错了,或者我接下来要检查什么?
我有一个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现在拥有IBM i Access for Mac,5250仿真器是一个非常理想的功能,但默认的安装方法并不是用户期望它存在的"Mac方式" /Applications.如何安装它像/Applications文件夹中带有图标/应用程序的普通Mac应用程序一样?
使用来自著名的学概念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,但我不确定这是个好主意.文档说"当允许多个重复过程时,与导入请求匹配的指定模块和服务程序列表中的第一个导出过程是所选的过程." 你能确定哪个符号将成为列表中的第一个吗?订单是否严格定义?