as400 acsbundle.jar IBM
as400 acsbundle.jar IBM
我正在研究 AS400。我对这个工具完全陌生。
当我启动 IBM tool interface 时,我可以单击一个 link 来启动另一个 window,它允许我执行 SQL 脚本。
然后我可以执行 1 个命令,然后执行 SQL 请求。
第一个命令(根据我的理解)允许我过滤数据,而第二个命令是基本的 SQL 请求。
我希望能够执行 this 2 commands 但在命令行中直接使用 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
第一个命令说:程序已正确执行但是当我尝试下载结果时(使用第二个命令)它不是预期的......更糟糕的是我什至可以在没有任何参数的情况下执行程序并且它表示程序正常执行。
当我打开我的文件时,它只给我当天的数据:/
因此,如果有人可以帮助我,我将不胜感激!非常感谢:)
了解这里发生的事情会很有用 - 我假设程序将您的过滤输出写入 table,然后 SQL 语句读取?
我猜你的自动化问题是第二个请求在第一个请求完成之前开始,因为它们将 运行 在完全独立的进程中。
您可能最好编写(或要求其他人编写)一个存储过程以在 SQL 的第一步中调用程序,这样您就可以一次性调用整个程序 SQL 脚本。
我找到了 2 个解决方案:
第一个是使用插件 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
我正在研究 AS400。我对这个工具完全陌生。
当我启动 IBM tool interface 时,我可以单击一个 link 来启动另一个 window,它允许我执行 SQL 脚本。
然后我可以执行 1 个命令,然后执行 SQL 请求。
第一个命令(根据我的理解)允许我过滤数据,而第二个命令是基本的 SQL 请求。
我希望能够执行 this 2 commands 但在命令行中直接使用 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
第一个命令说:程序已正确执行但是当我尝试下载结果时(使用第二个命令)它不是预期的......更糟糕的是我什至可以在没有任何参数的情况下执行程序并且它表示程序正常执行。 当我打开我的文件时,它只给我当天的数据:/
因此,如果有人可以帮助我,我将不胜感激!非常感谢:)
了解这里发生的事情会很有用 - 我假设程序将您的过滤输出写入 table,然后 SQL 语句读取? 我猜你的自动化问题是第二个请求在第一个请求完成之前开始,因为它们将 运行 在完全独立的进程中。 您可能最好编写(或要求其他人编写)一个存储过程以在 SQL 的第一步中调用程序,这样您就可以一次性调用整个程序 SQL 脚本。
我找到了 2 个解决方案:
第一个是使用插件 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