英文:
as400 acsbundle.jar IBM
问题
我正在使用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
第一个命令表示:程序已经正确执行,但是当我尝试下载结果(使用第二个命令)时,结果与预期不符... 更糟糕的是,我甚至可以不带任何参数执行该程序,它也会显示程序已正常执行。
当我打开我的文件时,它只给我当前日期的数据 :/
因此,如果有人能够帮助我解决这个问题,我将非常感谢!非常感谢您!
英文:
I'm working on AS400. I'm completely new on this tool.
When I launch the IBM tool interface I can click on a link to launch an other window that allows me to execute SQL scripts.
Then I can to execute 1 command and then a SQL request.
The first command (according to what I understood) allows me to filter the data while the second command is a basic SQL request.
I want to be able to execute this 2 commands but in command line with the jar directly.
I tried to do as below :
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
The first command says : the program has been executed correctly but when I try to download the result (with the second command) it's not the one expected... Worse I can even execute the program without any param and it says the program is executed normally.
When I open my file it's only give me the data from the current day :/
So if anyone can help me with this that'll be greatly appreciated ! Thanks a lot
答案1
得分: 0
这里理解起来会很有用 - 我假设该程序将筛选后的输出写入一个表,然后SQL语句再读取这个表?
我猜测你在自动化方面的问题可能是第二个请求在第一个请求完成之前就开始了,因为它们将在完全独立的进程中运行。
你可能最好编写(或请其他人编写)一个存储过程,以便从SQL中调用第一步的程序,这样你可以将整个过程作为一个SQL脚本一次性调用。
英文:
It would be useful to understand what is happening here - I assume the program writes your filtered output to a table, which the SQL statement then reads?
I would guess your problem with automation is that the second request is starting before the first one finishes, because they will be running in completely separate processes.
You would probably be better off writing (or asking someone else to write) a stored procedure to call the program in the first step from SQL, so that you could call the whole lot in one go as a SQL script.
答案2
得分: 0
我找到了2个解决方案:
第一个方案是使用rss插件...如果没有人能帮助你理解先前的库/程序究竟是做什么的,那么你可以像这样做:
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插件。根据您的库的执行时间(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
英文:
I found 2 solutions :
The first one is using the plugin rss.. If nobody can help you understand what is the previous lib / prog exactly do then you can something like :
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
Basically, this solutions allows you to use the rss plugin. Depending of the time of execution of your lib (CALL MYPROG.MYLIB
you should increase the sleep
time before killing the process.
Next solution, cleaner of course, will be to have a nice SQL request where you know what you need and then :
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论