我正在研究AS400。我对这个工具完全陌生。
当我启动IBM工具界面时,我可以单击一个链接来启动另一个允许我执行SQL脚本的窗口。
然后我可以执行一个命令,然后执行一个SQL请求。
第一个命令(根据我的理解(允许我过滤数据,而第二个命令是一个基本的SQL请求。
我希望能够执行这两个命令,但在命令行中直接使用jar。
我试着做如下:
java -jar /Applications/IBMiAccess/acsbundle.jar /plugin=rmtcmd /cmd="call myLib/myProg '20200706 20200708 10047'" /system=my.ip.address
java -jar /Applications/IBMiAccess/acsbundle.jar /plugin=cldownload /system=my.ip.address /clientfile=/Users/MYUSERNAME/Downloads/test.xlsx /sql="SELECT * FROM MYDB.MYTABLE" /userid=MYUSERID
第一个命令说:程序已经正确执行,但当我尝试下载结果(使用第二个命令(时,它不是预期的。。。更糟糕的是,我甚至可以在没有任何参数的情况下执行程序,它说程序执行正常。当我打开我的文件时,它只会给我当天的数据:/
所以,如果有人能帮我做这件事,我将不胜感激!非常感谢:(
了解这里发生的事情会很有用——我假设程序将过滤后的输出写入一个表,然后SQL语句读取该表?我想您在自动化方面的问题是,第二个请求在第一个请求完成之前就开始了,因为它们将在完全独立的进程中运行。您最好编写(或请其他人编写(一个存储过程,以便在SQL的第一步中调用程序,这样您就可以将整个过程作为SQL脚本一次性调用。
我找到了两个解决方案:
第一个是使用插件rss。。如果没有人能帮助你理解以前的lib/prog到底做了什么,那么你可以做一些类似的事情:
for indexArray in "${!ips[@]}"
do
nameFile="${workingFolder}""${warehouse[$indexArray]}".csv
java -jar $pathIBM/acsbundle.jar /system="${ips[$indexArray]}" /plugin=logon /USERID=${USERNAME} /PASSWORD=${PASSWORD}
java -jar $pathIBM/acsbundle.jar /system=${ips[$indexArray]} /plugin=rss /sql="CALL MY_LIB.MY_PROG(${date28DaysAgos}, ${todayDate},${store})" /autorun=1 &
pid=$!
sleep 30
kill -9 $pid
java -jar $pathIBM/acsbundle.jar /plugin=cldownload /system="${ips[$indexArray]}" /clientfile="${nameFile}" /sql="SELECT * FROM MYDB.MYTABLE" /userid=${USERNAME}
done
基本上,这个解决方案允许您使用rss插件。根据lib的执行时间(CALL MYPROG.MYLIB
(,您应该在终止进程之前增加sleep
的时间。
下一个解决方案,当然更干净,将是有一个漂亮的SQL请求,你知道你需要什么,然后:
for indexArray in "${!ips[@]}"
do
nameFile="${workingFolder}""${warehouse[$indexArray]}".csv
java -jar $pathIBM/acsbundle.jar /system="${ips[$indexArray]}" /plugin=logon /USERID=${USERNAME} /PASSWORD=${PASSWORD}
java -jar $pathIBM/acsbundle.jar /plugin=cldownload /system="${ips[$indexArray]}" /clientfile="${nameFile}" /sql="${sql}" /userid=${USERNAME}
done