在shell脚本中迭代PL/SQL结果

在shell脚本中迭代PL/SQL结果,shell,sh,Shell,Sh,我不熟悉shell脚本,因此需要帮助。我正在尝试对OracleDB执行sql查询。收到sql查询结果后,我需要遍历结果(因为它将返回多个行和列) 这里的目标是使用curl为db result中检索到的每个记录调用restapi。REST api的输入将是根进程ID列的值。 下面是我迄今为止开发的shell脚本和sql查询的示例输出 #!/bin/bash #Update below properties as per enviornment export ENV=DEV; export SERV

我不熟悉shell脚本,因此需要帮助。我正在尝试对OracleDB执行sql查询。收到sql查询结果后,我需要遍历结果(因为它将返回多个行和列)

这里的目标是使用curl为db result中检索到的每个记录调用restapi。REST api的输入将是根进程ID列的值。

下面是我迄今为止开发的shell脚本和sql查询的示例输出

#!/bin/bash
#Update below properties as per enviornment
export ENV=DEV;
export SERVERHOST=localhost
export SERVERPORT=9000
export SERVERUSER=admin
export SERVERPASSWORD=admin123
export DBHOST=localhost
export DBPORT=1537
export DBSID=ORCL
export DBUSER=SCOTT
export DBPASS=TIGER
export LOGDIR=/usr/app/$USER/data/logs/

#-------------------------------------------------------------------------
#----------- DO NOT EDIT AFTER THIS LINE ---------------------------------
#-------------------------------------------------------------------------

#create directory structure if not exists for storing log files
mkdir -p $LOGDIR/process_cancellation
mkdir -p $LOGDIR/process_cancellation/old
mkdir -p $LOGDIR/process_cancellation/halted
export old_proc_cancellation_logfile=$LOGDIR/process_cancellation/old/log_$(date "+%Y%m%d%H%M%S").log;
export halted_proc_cancellation_logfile=$LOGDIR/process_cancellation/halted/log_$(date "+%Y%m%d%H%M%S").log;

#execute sql query to fetch halted process data from database
echo
echo "Enviornment : $ENV"
echo
echo "Connecting to - $DBUSER/$DBPASS@$DBHOST:$DBPORT/$DBSID"
echo
echo "Retrieving halted process data logged before : $(date -d "15 days ago" +%d/%m/%Y) 20:00:00"
echo
sqlplus -s $DBUSER/$DBPASS@$DBHOST:$DBPORT/$DBSID << FIN_SQL > $halted_proc_cancellation_logfile
set head off
set line 1024
set pages 9999
SET SERVEROUTPUT ON;
SELECT  ROOT_PROC_ID, PROC_ID, PROC_NAME, START_DATE, STATUS, ORDER_REF 
FROM USER.PROC_STATUS
WHERE START_DATE<(SYSDATE - 15) AND (STATUS='proc_halted' OR STATUS='proc_failed')
ORDER BY START_DATE DESC;
SET SERVEROUTPUT OFF;
FIN_SQL

echo "Please check log file for more details : $(readlink -f $halted_proc_cancellation_logfile)"

exit

假设sql查询输出位于output.txt中:

awk 'NR!=1' output.txt | while read rootprocid undef
do
   callApi $rootprocid
done
NR=1
跳过包含标题的第一行

读取rootprocid undef
仅读取rootprocid中的第一列,其余部分转到变量undef,因为它不感兴趣


callApi$rootprocid
callApi将替换为实际的api调用。

假设sql查询输出在output.txt中:

awk 'NR!=1' output.txt | while read rootprocid undef
do
   callApi $rootprocid
done
NR=1
跳过包含标题的第一行

读取rootprocid undef
仅读取rootprocid中的第一列,其余部分转到变量undef,因为它不感兴趣


callApi$rootprocid
callApi将替换为实际的api调用。

您到底想要实现什么?问得不清楚你在问什么?@Guru-更新了目标问题。粘贴相同的内容:“这里的目标是为db结果中检索到的每个记录使用curl调用REST api。REST api的输入将是ROOT\u PROC\u ID列值。”您到底想要实现什么?问得不清楚你在问什么?@Guru-更新了目标问题。粘贴相同的内容:“这里的目标是为数据库结果中检索到的每个记录使用curl调用REST api。REST api的输入将是ROOT\u PROC\u ID列值。”谢谢Guru。实际上,我正试图从shell脚本var本身读取ROO_PROC_ID来调用restapi。成功调用RESTAPI后,我计划将状态更改为“pi_cancelled”。最后,我计划创建带有DB Result的CSV文件,其中理想状态列将具有“pi_cancelled”或“pi_stopped”值。希望这有助于理解完整的需求。谢谢上师。实际上,我正试图从shell脚本var本身读取ROO_PROC_ID来调用restapi。成功调用RESTAPI后,我计划将状态更改为“pi_cancelled”。最后,我计划创建带有DB Result的CSV文件,其中理想状态列将具有“pi_cancelled”或“pi_stopped”值。希望这有助于理解完整的需求。