我有一个Korn Shell调用SQL / PLUS来检查并将数据假脱机到UNIX中的.CSV文件中。
这个KShell在Unix上工作正常,它创建文件并返回0.
从UC4 AppWorx启动作业我希望他在完成时在作业中发出的通知中附加UNIX中的假脱机文件。
我希望这样做:
1º我启动工作
2º它检查数据,如果数据已建立,则它在UNIX中的/ tmp目录中创建一个带有.CSV扩展名的文件。
3º当工作完成后,他在Unix中向我发送一封带有假脱机文件(.CSV)的电子邮件。
有什么办法吗?我该怎么做?
感谢。
答案 0 :(得分:0)
您需要在Appworx中创建一个链(文档应该能够引导您完成它)。这个连锁店将有一个或多个工作岗位。
首先,您不需要k脚本来调用SQL / PLUS。您可以直接调用SQL / PLUS。将脚本编写为.sql文件(根据需要可以包含sqlplus指令,sql和PL / SQL)。将作业设置为"程序类型" AWSQLP。将它指向您已向Appworx提供的.sql脚本。
sqlplus脚本可以使用逻辑来确定它是否应该创建文件。如果它应该,它可以直接写出文件(虽然从中获取正确的.csv文件可能会很痛苦。)
然后,将通知附加到作业,并且通知对象应设置为执行电子邮件附件。你必须使用"模式"键入,并将完整的文件路径放入csv。如果你想要每个调用一个新的文件名,可以使用替换变量。
根据您的版本,其中一些选项可以稍微移动一下(我们刚刚升级,UC4不再拥有它)。点击帮助菜单,然后进入文档条目......它不是世界上最好的,但远非最差的。
答案 1 :(得分:0)
首先感谢您的回答。
我通常创建一个JOB,例如,SEM_CHECK_THINGS,在UC4上定义1个提示,在数据库中运行查询以检查表,test_table(示例)是否获得数据,为此我使用 select decode( count_ *,0,'N','Y')来自test_table;
此作业还在unix中执行简单的KShell:
KShell内容:
echo "Job Name: $1"
echo "Job Control Flag: $2"
jobName=$1
jobFlag=$2
echo "Job ${jobName} started ..." >> $logFile
date >> $logFile
if [[ ${jobFlag} == "Y" ]]; then
echo "Job ${jobName} executed successfully with data found." >> $logFile
echo "Job ${jobName} executed successfully with data found."
exit 1
else
echo "Job ${jobName} finished with no data found." >> $logFile
echo "Job ${jobName} finished with no data found."
exit 0
fi
如果发现数据要求另一个将执行.SQL的作业,我通常会使用Exit 1强制“ABORT”,这将调用test_table中的数据。
whenever sqlerror exit sql.sqlcode
whenever sqlerror exit 1
prompt this is a test
set echo off
set trimspool on
set trimout off
set linesize 1500
set feedback on
set newpage none
SET HEADING OFF
set und off
set pagesize 10000
alter session set nls_date_format = 'dd-MON-yyyy HH24:MI:SS';
spool &1
SELECT 'PREV_RESULTSET;LAST_RESULTSET;NR_COUNT' FROM DUAL
UNION ALL
SELECT PREV_RESULTSET||';'||LAST_RESULTSET||';'||COUNT(1) NR_COUNT
FROM SEM_REPORT_PEDIDOS
GROUP BY PREV_RESULTSET, LAST_RESULTSET;
spool off
exit 1
通过使用假脱机& 1和“硬编码”文件testspool.csv在该作业通知中的“其他输出”选项中我设法执行此操作,以接收包含我需要/想要的内容的电子邮件从那张桌子。
但我真的希望它能在一个单独的作业中进行验证,进行验证,如果找到数据,则将Spool和.CSV文件附加到该作业发送的电子邮件通知中。