从Oracle中截取数据时出现问题。它将经过的时间换行,而不是将sql查询的结果假脱机到输出文件中

时间:2018-04-16 12:19:27

标签: sql oracle plsql oracle11g sqlplus

我正在努力创建一个每天运行一次的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。

我哪里错了? 请帮忙。 在此先感谢..

1 个答案:

答案 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中所述。