etl_monitor_v2.sh //控制何时发短信----------------------------------ORACLE_SID=orclORACLE_BASE=/opt/oracleORACLE_HOME=/opt/oracle/product/10.2.0export ORACLE_SID ORACLE_BASE ORACLE_HOMEPWD_DIR=/home/oracle/shellSQLPLUS=${ORACLE_HOME}/bin/sqlplusCONFIG_INI=${PWD_DIR}/ini/config_v2.inigameuser='GAMEDATA/"h^zx@xxnm(Ybn"'echo ${gameuser}echo ${SQLPLUS}cd ${PWD_DIR}${SQLPLUS} ${gameuser} @etl_monitor_v2.sql;/exit;!--------------------------------------etl_monitor_v2.sql //真正发短信的东东declare  p_txt     varchar2(4000);  p_txt_all varchar2(4000);  req       UTL_HTTP.REQ;  resp      UTL_HTTP.RESP;begin  for r in (select job_name, run_cnt, table_name, column_name              from etl_monitor_config_tab) loop    -- Call the Etl Monitor function    p_txt     := etl_monitor_v2(r.job_name, r.run_cnt);    p_txt_all := p_txt_all || p_txt; --短信的内容!  end loop;  if p_txt_all is not null then    req  := UTL_HTTP.BEGIN_REQUEST('http://192.168.XXX/pass/web/alertsms.php?data=' ||                                   p_txt_all);    resp := UTL_HTTP.GET_RESPONSE(req);    utl_http.end_response(resp);  end if;EXCEPTION  WHEN utl_http.end_of_body THEN    utl_http.end_response(resp);end;--PS:其实http://192.168.XXX/pass/web/alertsms.php这个链接地址是真正的发短信的接口这个具体是通过PHP来实现的-------------------------------------etl_monitor_v2 的内容create or replace function etl_monitor_v2(job_name varchar2, run_cnt int)  RETURN varchar2 IS  v_monitor_date date; --The monitor of the proc's date  v_job_name     varchar2(130);  v_log_id       number;  v_status_cnt   int;  v_result       varchar2(4000);begin  v_monitor_date := trunc(sysdate);  v_job_name     := job_name;  if run_cnt = 1 then    select log_id      into v_log_id      from user_scheduler_job_run_details     where job_name = v_job_name       and trunc(actual_start_date) = v_monitor_date;  else    select max(log_id)      into v_log_id      from user_scheduler_job_run_details     where job_name = v_job_name       and trunc(actual_start_date) = v_monitor_date;  end if;  select count(*)    into v_status_cnt    from user_scheduler_job_run_details   where log_id = v_log_id     and status = 'SUCCEEDED';  if v_status_cnt = 0 then    select OWNER || '.' || JOB_NAME || '+FALSED+' ||           TO_CHAR(TRUNC(ACTUAL_START_DATE), 'MM-DD')      into v_result      from user_scheduler_job_run_details     where log_id = v_log_id;  end if;  return v_result;exception  when others then    return SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') || '.' || v_job_name || '+NOEXECUTE+' || TO_CHAR(v_monitor_date,                                                                                                     'MM-DD');end;
01-06 09:26