我正在努力创建一个每天运行一次的cron作业。在调用shell脚本时,它调用一个Sql文件。这反过来将数据Spools到文件中。此文件由Shell脚本选取,然后相应地邮寄。问题是当我尝试假脱机数据时,它正在写经过的时间而不是将实际的查询结果写入输出文件。
这是我正在使用的sql文件。
set define off
set numformat 99999999999999999999999999
set markup html on
set serveroutput on
set head on
set pages 3000
set echo off
DECLARE
total integer :=0;
total = select count(*) from t_c_table1 vt, t_c_table2 ti WHERE vt.f_item_id = ti.f_item_id (+) AND (f_update_date < sysdate - 30)order by F_INSERT_DATE desc;
IF total > 0 then
spool /home/output.csv
select f_name, count (*) from t_c_table1 where F_INSERT_DATE < sysdate-100 group by f_item_provider_id;
spool off
END IF
我在假脱机的csv文件中输出Elapsed:00:00:00.506。
我哪里错了? 请帮忙。 在此先感谢..
答案 0 :(得分:1)
你发布的代码是错误的,它甚至不会在Oracle中编译,所以我很惊讶你有任何东西。
由于没有$(document).ready(function () {
$(document).on("click", "#submitButton", function () {
debugger;
var userId = $(this).attr('userid')
$.ajax({
type: 'POST',
url: "../LemonCreditAuth/NaturalPerson/RunMedia",
data: {
ID: userId
},
success: function (data) {
swal("Adverse Media!", "Adverse Media has started. After a 20 seconds please check the media case for updates", "success");
},
error: function (data, error) {
swal("Adverse Media!", "Error ocurred while trying to run adverse media", "warning");
}
});
});
,我不确定是什么产生了假脱机文件中经过的时间线。也许它是你正在看的一些旧的,以前创建的CSV文件?
除了SET TIMING ON
是一个SQL * Plus命令(因此你无法在PL / SQL过程中调用它)这一事实,你计算TOTAL变量值的方式是错误的 - 它应该是SPOOL
声明。
SELECT ... INTO
如果要有条件地假脱机数据,则必须使用SQL> declare
2 total integer := 0;
3 begin
4 select count(*)
5 into total
6 from dept;
7
8 if total > 0 then
9 spool test.csv
10 select * from dept;
11 spool off;
12 end if;
13 end;
14 /
spool test.csv
*
ERROR at line 9:
ORA-06550: line 9, column 12:
PLS-00103: Encountered the symbol "TEST" when expecting one of the following:
:= . ( @ % ;
SQL>
包。
或者,您可以“以交互方式”执行此操作,以便SQL * Plus会询问您是否要假脱机数据,正如Alex Poole在他的回答here中所述。