Pages

Sunday, November 15, 2015

Oracle Reference: Various commands

=======================
Check parameter Value
=======================
SELECT * FROM V$PARAMETER
WHERE UPPER(NAME) LIKE '%UNDO%'


=======================
Create Database Link
=======================
CREATE DATABASE LINK my_link CONNECT TO user IDENTIFIED BY password USING 'connect_string';

=======================
DBMS_OUTPUT.PUT_LINE
=======================

To add empty line:
DBMS_OUTPUT.PUT_LINE(CHR(10));

=======================
Check Oracle Instance name.
=======================
SELECT * FROM V$INSTANCE
Or
SELECT * FROM GLOBAL_NAME;

=======================
Update multiple columns

=======================
UPDATE MY_TABLE
   SET COL_1 = VAL_1, 
       COL_2 = VAL_2
 WHERE COL_X = VAL_X;


=======================
Add Constraint

=======================
For Primary Key:
ALTER TABLE MY_TABLE ADD PRIMARY KEY  (col_a,col_b);
or

ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_PK PRIMARY KEY  (col_a,col_b);
For Unique Constraint:
ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_UQ UNIQUE  (col_a,col_b);

=======================
INSERT INTO FROM SELECT

=======================
To populate one table from another table

INSERT INTO TABLE_A(col1, col2, col3)
SELECT col1
, col2, col3 FROM TABLE_B;


Code Example. Generate xls file from DB.(batch, sqlplus)

====================
General
====================
Generate xls file from database.

====================
Files List
====================
BRING_FROM_DB.bat
activate_report.sql
GenerateReport.sql

DELDWHCMD.ini
DWHCMD.ini
SFTPCMD2.bat
SFTPCMD3.bat

====================
Code
====================

BRING_FROM_DB.bat
REM set Paths

SET HOME_DIR=D:\Report\files
SET OLD_DIR=D:\Report\Oldfiles

REM Delete old temp file

IF EXIST DELDWHCMD.ini DEL DELDWHCMD.ini
IF EXIST del_files.txt DEL del_files.txt

REM get date

for /f "tokens=2,3,4 delims=/ " %%i in ('date/t') do (set mm=%%i) & (set dd=%%j) & (set yyyy=%%k)
set RUN_DATE=%yyyy%%mm%%dd%
set EMAIL_RUN_DATE=%dd%/%mm%/%yyyy%
echo %RUN_DATE% >> TapFilesLog.txt

REM get time

for /f "tokens=1,2 delims=: " %%i in ('time /t') do (set hh=%%i) & (set mm=%%j)
set RUN_TIME=%hh%_%mm%
echo %RUN_TIME% >> TapFilesLog.txt

REM echo #### >> TapFilesLog.txt
echo Activate database package: >> TapFilesLog.txt
REM echo #### >> TapFilesLog.txt
sqlplus user/pass@orainst @activate_report.sql %RUN_DATE%
REM for debug: 20090405
REM append spool file into log
type procedure_result.txt >> TapFilesLog.txt

IF EXIST procedure_result.txt DEL procedure_result.txt
IF NOT ERRORLEVEL 0 goto :ERROR_DB

:BRING_THE_FILES
echo before FTP >> TapFilesLog.txt
CALL SFTPCMD2
echo Finished FTP successfully >> TapFilesLog.txt
dir /B D:\report\files\*.xls /O:d >> del_files.txt
echo cd /software/oracle/admin/igt/utl_file >> DELDWHCMD.ini

for /F %%i in (del_files.txt) do (@echo rm %%i) >> DELDWHCMD.ini
echo bye >> DELDWHCMD.ini
echo delete files on DWH server >> TapFilesLog.txt
CALL SFTPCMD3
if NOT ERRORLEVEL 0 GOTO :ERROR_DELETING
echo send the files by email to the customer >> TapFilesLog.txt

REM ### START DEBUG ###
REM for /F %%i in (del_files.txt) do (blat MailBody.txt -to me@gmail.com -bcc me@starhome.com -from me@starhome.com -subject "Starhome Tap File Report 
%EMAIL_RUN_DATE%" -attach files\%%i)
REM ### END DEBUG ###

if NOT ERRORLEVEL 0 GOTO :ERROR_SFTP
echo Rename the sent XLS files to old directory >> TapFilesLog.txt
for /F  %%i in (del_files.txt) do (move %HOME_DIR%\%%i %OLD_DIR%\%%i)
if NOT ERRORLEVEL 0 GOTO :ERROR_RENAME
echo process finish succefully >> TapFilesLog.txt
goto FINISH
:ERROR_DB
 echo Error running the procedure "monthly_reports.TapMonthlyReport" in the database please consult MIS ! >> TapFilesLog.txt
REM REM send mail
:ERROR_DELETING
 echo Errors deleting from the DWH! >> TapFilesLog.txt
REM REM send mail
 goto FINISH
:ERROR_SFTP
 echo Errors Sending the report to customer by mail >> TapFilesLog.txt
REM REM send mail
 goto FINISH
:ERROR_RENAME
 echo Errors moving the files to the oldDir directory >> TapFilesLog.txt
REM REM send mail
 goto FINISH
:FINISH
REM pause


Report.sql
  PROCEDURE MonthlyReport(pDateOfRun VARCHAR2) IS
    l_cursor     INTEGER := DBMS_SQL.open_cursor;
    vDirectory   VARCHAR2(200) := 'UTL_FILE_DIR';
    vFname       VARCHAR2(200) := '';
    v_start_date VARCHAR2(8);
    v_end_date   VARCHAR2(8);
    
  BEGIN
    v_start_date := to_char(trunc(trunc(TO_DATE(pDateOfRun, 'YYYYMMDD'),'MM') - 1, 'MM'), 'YYYYMMDD');                                        
    v_end_date   := to_char(trunc(TO_DATE(pDateOfRun, 'YYYYMMDD'), 'MM') - 1,'YYYYMMDD');
    vFname := 'TAP_FILE_REPORT_' || v_start_date || '_' || v_end_date ||'.xls';              
  
    DBMS_SQL.parse(l_cursor,
                   'SELECT T.vpmn AS VPMN,U.hpmn_name AS HPMN ,T.seq_num AS SEQ_NUM,'||
                   'T.date_file_created,' ||
                   'T.first_call, T.last_call, T.num_of_records AS NUM_OF_RECORDS ' ||
                    'FROM TAP_FILE_CREATED T,EXT_TAP_CUSTOMER U ' ||
                    'WHERE T.customer_id = U.customer_id ' ||
                    'AND T.customer_id IN (''026'',''005'') ' ||
                    'AND T.date_of_call>= ''' || v_start_date ||
                    ''' AND T.date_of_call<= ''' || v_end_date ||
                    ''' ORDER BY U.hpmn_name, T.vpmn, T.seq_num',
                   DBMS_SQL.native);
   
    XML_SPREADSHEET.abfrage(p_cursor => l_cursor, p_path => vDirectory, p_filename => vFname, p_sheetname => 'Tap File Report');
                            
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      RAISE;
  END MonthlyReport;



activate_report.sql

spool D:\Report\procedure_result.txt

exec monthly_reports.MonthlyReport(&1);
spool off
exit;

DELDWHCMD.ini
cd /software/oracle/admin/igt/utl_file 
rm TAP_FILE_REPORT_20151001_20151031.xls
bye 

DWHCMD.ini 
lcd D:\Report\files
cd /software/oracle/admin/igt/utl_file
mget TAP_FILE_REPORT_*.xls
bye

SFTPCMD2.bat
sftp -b DWHCMD.ini oracle@10.227.3.150

SFTPCMD3.bat
sftp -b DELDWHCMD.ini oracle@10.227.3.150

Perl, Batch, sqlplus code example. Generate extract from several DB.

====================
General
====================
Connect to DB listed in ini file.
And append output to one HTML type output.

====================
Files List
====================
refresh_report_main.bat
refresh_report_main.pl
main_from_perl.bat
run_sql.bat
refresh_log_sql.sql

refresh_report.ini
db_list.ini
last_db_report.txt
gates_refresh_log_stats.txt

====================
Files
====================
refresh_report_main.bat
perl refresh_report_main.pl

refresh_report_main.pl
#! /usr/bin/perl
#Daily process for reading from refresh_log table on gates

use DateTime;

use strict;
use warnings; 

#===================
#Global Parameters
#===================
my $INI_FILE='refresh_report.ini'; 
my $LOG_FILE_BASE_NAME='Gates_Refresh_Log';
my $display_delimiter="========================================\n";
my %hashTable;

my $MAIN_HOME_WIN='';
my $BAT_CMD = '';
my $MAIL_CMD= '';
my $MAIL_HEADER='';
my $MAIL_FOOTER='';
my $MAIL_PATH='';

my $INI_FILE_FOR_DB;
my $DB_LOG='';
my $LOG_FILE_PATH='';
my $LOG_FILE_NAME='';
my $REPORT_FILE_PATH='';
my $REPORT_FILE='';
my $LAST_DB_REPORT_FILE='';

my $timestamp='';
my $logFile='';
my $dbLogFile='';
my $reportFile='';
my $mailCmd='';
my $mailHeaderFile='';
my $mailFooterFile='';
my $lastReportFile;
my $run_date='';
my $result='';
#==================================
# subs
#==================================

sub setRundate{
  my $dateTime=DateTime->now;
  my $month=$dateTime->month;
  my $year=$dateTime->year;
  
  if ($month < 10){ $month="0".$month ; }
  my $day=$dateTime->day;
  if ($day < 10){ $day="0".$day ; }
  my $hh=$dateTime->hour;
  if ($hh < 10){ $hh="0".$hh ; }
  my $mm=$dateTime->minute;
  if ($mm < 10){ $mm="0".$mm ; }
  my $ss=$dateTime->second;
  if ($ss < 10){ $ss="0".$ss ; }

  $run_date=$dateTime->year.$month.$day;
  
  $timestamp=$run_date."_".$hh.$mm.$ss;
  print "Running time: ".$timestamp."\n";
}

sub fileFullPathNames{
$reportFile=$REPORT_FILE_PATH."\\".$REPORT_FILE."_".$timestamp.".rep";
$dbLogFile=$LOG_FILE_PATH."\\".$DB_LOG;
$mailCmd=$MAIL_PATH."\\".$MAIL_CMD;
$mailHeaderFile=$MAIL_PATH."\\".$MAIL_HEADER;
$mailFooterFile=$MAIL_PATH."\\".$MAIL_FOOTER;
}


sub setLogFileName{
  $logFile=$LOG_FILE_PATH."\\".$LOG_FILE_NAME."_".$timestamp.".log";
  my $status=0;
  #print "Will try to create now new folder: ".$LOG_FILE_PATH;
  if (!-d "$LOG_FILE_PATH" ){
my $cmd = "mkdir "."\"".$LOG_FILE_PATH."\"";
$status=system($cmd);
  }
  if ($status == 0 ){  
    print "\n";
    print $display_delimiter;
    print "\n";
    print "Log File: ".$logFile."\n";
    print "\n";
    print $display_delimiter;
    print "\n";
  }
  $status;
}

sub readIniFile{
  my $i_ini_file=shift;
  
  my $line='';
  my $key='';
  my $value='';    
  my $match_str = "CUSTOMER_[0-9][0-9]"; 
  
  #read from ini file
  open(FILE_HANDLER, "$i_ini_file") or die ("Could not open ini file: "."$i_ini_file"."\n");
  my $count=0;
  foreach $line (<FILE_HANDLER>){
    chomp($line);
    if ($line =~ /^$/) { 
#nothing. Ignore empty lines
    }elsif($line =~ /^#/) { 
#nothing. Ignore # comment lines lines
}else{
 ($key, $value)=split(/=/,$line);
  $hashTable{$key} = $value;   
   }
 }
 close (FILE_HANDLER);
}

sub sendMail{
  my @mailArg = "";
  my $sendMailInd=0;
  print "Running command: ".$mailCmd." to send contents of file: ".$reportFile;
  @mailArg=($mailCmd,$reportFile);
  system(@mailArg);
}

sub printMultipath{
  my $str = shift;
  my $log_handler = shift;
    print $log_handler ($str);
print ($str);  
}

sub setGeneralParams{
   #from ini file
   $MAIN_HOME_WIN = $hashTable{"MAIN_HOME_WIN"}; 
   $INI_FILE_FOR_DB=$hashTable{"INI_FILE_FOR_DB"};
   $BAT_CMD = $hashTable{"BAT_CMD"}; 
   $DB_LOG=$hashTable{"DB_LOG"};
   $REPORT_FILE=$hashTable{"REPORT_FILE"};
   $MAIL_CMD = $hashTable{"MAIL_CMD"};
   $MAIL_HEADER = $hashTable{"MAIL_HEADER"};
   $MAIL_FOOTER = $hashTable{"MAIL_FOOTER"};
   $LAST_DB_REPORT_FILE= $hashTable{"LAST_DB_REPORT_FILE"};
   
   #concatinations
   $LOG_FILE_PATH=$MAIN_HOME_WIN."\\"."Logs";
   $REPORT_FILE_PATH=$MAIN_HOME_WIN."\\"."Reports";
   $LOG_FILE_NAME=$LOG_FILE_BASE_NAME."_".$timestamp.".log";
   $MAIL_PATH=$MAIN_HOME_WIN."\\"."Mail";
   $lastReportFile=$MAIN_HOME_WIN."\\".$LAST_DB_REPORT_FILE;
   #report
   print $display_delimiter;
   print "Running With General Parameters:"."\n";
   print "MAIN_HOME_WIN: ".$MAIN_HOME_WIN."\n";
   print "BAT_CMD: ".$BAT_CMD."\n";
   print "INI_FILE_FOR_DB: ".$INI_FILE_FOR_DB."\n";
   #print "MAIL_CMD: ".$MAIL_CMD."\n";
   print "DB_LOG: ".$DB_LOG."\n";
   print "Report: ".$REPORT_FILE."\n";
   print $display_delimiter;
}


sub runOsCommand{

my $log_handler = shift;
my $cmd = shift;
my $ini_file = shift;
print "Running Command: ".$cmd."\n";
#$result=system($^X,$cmd);
    my @SendArg=($cmd,$ini_file, $dbLogFile);

$result=system(@SendArg);

#print "Exit point after call to ".$cmd." Exist status is: ".$result."\n";
$result;
}
sub updateLastDbReport{
  my $lastReportFile=shift;
  my $reportFile=shift;  
  
  open OUT_FILE,">",$lastReportFile or die $!;
  print OUT_FILE $reportFile."\n";
  close OUT_FILE or die $!;
}
sub formatReportFile{
    my $log_handler = shift;
my $sourceFile = shift;
my $targetFile = shift;
my $header=shift;
my $footer=shift;
    $result=system($^X,"format_db_report.pl",$sourceFile,$targetFile, $header,$footer);
$result;
}

sub reportGeneralParameters{
  my $log_handler = shift;
  
  printMultipath ("\n",$log_handler);
  printMultipath ($display_delimiter,$log_handler);
  printMultipath ("Input Parameters: \n",$log_handler);
  printMultipath ("Run Date:".$run_date."\n",$log_handler);
  printMultipath ("Log File: ".$logFile."\n",$log_handler);
  printMultipath ("MAIN_HOME_WIN: ".$MAIN_HOME_WIN."\n",$log_handler);    
  printMultipath ("BAT_CMD: ".$BAT_CMD."\n",$log_handler);    
  printMultipath ("MAIL_CMD: ".$MAIL_CMD."\n",$log_handler);    
  printMultipath ($display_delimiter,$log_handler);
  printMultipath ("\n",$log_handler);
}

sub reportStartOfProcess{
    my $log_handler = shift;

printMultipath ("\n",$log_handler);
    printMultipath ($display_delimiter,$log_handler);
printMultipath ("Refresh Log On Gates Checkup Process Started at: ".$timestamp."\n",$log_handler);
printMultipath ($display_delimiter,$log_handler);
printMultipath ("\n",$log_handler);
}
sub reportEndOfProcess{
    my $log_handler = shift;
    my $status = shift;

printMultipath ("\n",$log_handler);
    printMultipath ($display_delimiter,$log_handler);
if ($status == 0){
printMultipath ("Process has Finished Successfuly"."\n",$log_handler);

}else{
printMultipath ("Error!!!! Process has Terminated with Error."."\n",$log_handler);
}
printMultipath ($display_delimiter,$log_handler);
printMultipath ("\n",$log_handler);

$status;
}

sub handleStatus{
  my $status = shift;
  my $method = shift;
  my $log_handler = shift;
  
  if ($status != 0){
    if (defined $log_handler){
printMultipath ("Error in Routine: ".$method." Status: ".$status."\n",$log_handler);
}else{
print ("Error in Routine: ".$method." Status: ".$status."\n");
}
return $status;
  }
  $status;
}


#==================================
# The code starts here
#==================================

   $result=main();
   exit $result; 
   
#==================================
# sub main
#==================================
sub main{   
   no warnings 'uninitialized'; 

   setRundate();    
   readIniFile("$INI_FILE"); 
   setGeneralParams();
   $result=setLogFileName();      
   handleStatus($result, "setLogFileName",undef); 
   open my $LOG_HANDLER, '>', $logFile or die ("Could not open log file: ".$logFile); 
   fileFullPathNames();
   reportStartOfProcess($LOG_HANDLER);  
   reportGeneralParameters($LOG_HANDLER);  
   my $cmd='"'.$MAIN_HOME_WIN."\\".$BAT_CMD.'"';
   $result=runOsCommand($LOG_HANDLER,$cmd,$INI_FILE_FOR_DB);
   handleStatus($result, $cmd,undef); 
   #$result=formatReportFile($LOG_HANDLER,$dbLogFile,$reportFile,$mailHeaderFile,$mailFooterFile);
   $result=formatReportFile($LOG_HANDLER,$dbLogFile,$reportFile,"NULL","NULL");
   handleStatus($result, "formatReportFile",undef); 
   updateLastDbReport($lastReportFile,$reportFile);
   reportEndOfProcess($LOG_HANDLER, $result); 
   close $LOG_HANDLER; 
   #sendMail(); - mail is send from a server with access to mail server
}

main_from_perl.bat
ECHO OFF

SET inifile=%1%
SET REFRESH_LOG=%2%
SET TEMP_REFRESH_LOG=temp_gates_refresh_log_stats.txt

ECHO.
ECHO =============================================
ECHO main is starting
ECHO This Program read entries from file %inifile% and report results to %REFRESH_LOG%
ECHO =============================================
ECHO.

ECHO. 2>%REFRESH_LOG%

FOR /F "tokens=*" %%i IN (%inifile%) DO (
    ECHO handling %%i
ECHO. 2>%TEMP_REFRESH_LOG%
    call run_sql.bat %TEMP_REFRESH_LOG% %%i
    TYPE %TEMP_REFRESH_LOG% >> %REFRESH_LOG%
ECHO.
)

ECHO.
ECHO =============================================
ECHO main has finished
ECHO =============================================


run_sql.bat
SET spool_to_file=%1
SET db_name=%2
REM ECHO got DB name: %db_name%
REM ECHO refresh_log_sql %db_name%
sqlplus -l -s %db_name% @refresh_log_sql %spool_to_file% %db_name%

refresh_log_sql.sql
SET TERMOUT ON
SET SHOW OFF
SET VERIFY OFF 
SET HEAD ON
SET LINE 500
SET FEEDBACK OFF
SET PAGES 500
SET TRIMS ON

SPOOL &&1
SELECT '&&2' AS GATE_NAME, COUNT(*) AS REFRESH_LOG_ENTRIES FROM REFRESH_LOG;
SPOOL OFF
EXIT;
/

refresh_report.ini
MAIN_HOME_WIN=L:\refresh_report
INI_FILE_FOR_DB=db_list.ini
BAT_CMD=main_from_perl.bat
DB_LOG=gates_refresh.log
REPORT_FILE=refresh_log_report
MAIL_CMD=sendMail.bat
MAIL_HEADER=mail_header.txt
MAIL_FOOTER=mail_footer.txt
LAST_DB_REPORT_FILE=last_db_report.txt

db_list.ini
vip700/vip700@AGO-MOVIC-01_VNODE
vip700/vip700@ALB-VODAF-01_VNODE
vip700/vip700@ARG-PERSO-01_VNODE
vip700/vip700@AUS-VODAF-01_VNODE
vip700/vip700@AUT-CONNE-01_VNODE
vip700/vip700@AZE-AZERF-01-VNODE
vip700/vip700@BGR-MOBIL-01_VNODE
vip700/vip700@BOL-TELEC-01_VNODE
vip700/vip700@BRA-TIMRN-01_VNODE
vip700/vip700@CAN-ROGWI-01_DNODE

====================
Output Files
====================
last_db_report.txt
L:\refresh_report\Reports\refresh_log_report_20151108_140031.rep

gates_refresh_log_stats.txt

GATE_NAME                        REFRESH_LOG_ENTRIES
-------------------------------- -------------------
vip700/vip700@PRT-TELEC-01_VNODE                  17

GATE_NAME               REFRESH_LOG_ENTRIES
----------------------- -------------------
vip700/vip700@BGR-MOBIL               89539

Code Example. Format file in and mail with blat. (perl, bacth)

========================================
General
========================================
Generate HTML mail, via perl and sqlplus

========================================
Files List
========================================
Code
send_report_main.bat
send_report_main.pl
format_db_report.pl
send_report.ini

Mail files
sendMail.bat
mail_header.txt
mail_footer.txt
mail_header_template.txt
optional_reciepients.txt

Output File
daily_refreh_report.html

====================
Files
====================
send_report_main.bat
ECHO OFF
set PATH=c:\strawberry-perl\ver_5.18.2.1\perl\site\bin;c:\strawberry-perl\ver_5.18.2.1\perl\bin;%PATH%
perl send_report_main.pl

send_report_main.pl
#! /usr/bin/perl
#Daily process for reading from refresh_log table on gates

use DateTime;

use strict;
use warnings; 

#===================
#Global Parameters
#===================
my $INI_FILE='send_report.ini'; 
my $LOG_FILE_BASE_NAME='Gates_Refresh_Log';
my $display_delimiter="========================================\n";
my %hashTable;

my $MAIN_HOME_WIN='';
my $MAIN_REPORT_FILE='';
my $FILE_TO_SEND = '';
my $BAT_CMD = '';
my $MAIL_CMD= '';
my $MAIL_HEADER='';
my $MAIL_HEADER_TEMPLATE='';
my $MAIL_FOOTER='';
my $MAIL_PATH='';
my $MAP_DRIVE_LOCAL = '';
my $FORMAT_TYPE='';

my $mailCmd='';
my $mailHeaderTemplateFile='';
my $mailHeaderFile='';
my $mailFooterFile='';
my $reportFileName='';
my $fileToSend = '';
my $result='';
#==================================
# subs
#==================================


sub fileFullPathNames{

$fileToSend=$MAIN_HOME_WIN."\\".$FILE_TO_SEND;
$mailCmd=$MAIL_PATH."\\".$MAIL_CMD;
$mailHeaderTemplateFile=$MAIL_PATH."\\".$MAIL_HEADER_TEMPLATE;
$mailHeaderFile=$MAIL_PATH."\\".$MAIL_HEADER;
$mailFooterFile=$MAIL_PATH."\\".$MAIL_FOOTER;
}



sub readIniFile{
  my $i_ini_file=shift;
  
  my $line='';
  my $key='';
  my $value='';    
    
  #read from ini file
  open(FILE_HANDLER, "$i_ini_file") or die ("Could not open ini file: "."$i_ini_file"."\n");
  my $count=0;
  foreach $line (<FILE_HANDLER>){
    chomp($line);
    if ($line =~ /^$/) { 
#nothing. Ignore empty lines
    }elsif($line =~ /^#/) { 
#nothing. Ignore # comment lines lines
}else{
 ($key, $value)=split(/=/,$line);
  $hashTable{$key} = $value;   
   }
 }
 close (FILE_HANDLER);
}

sub sendMail{
  my @mailArg = "";
  my $sendMailInd=0;
  print "Running command: ".$mailCmd." to send contents of file: ".$fileToSend;
  @mailArg=($mailCmd,$fileToSend);
  system(@mailArg);
}

sub printMultipath{
  my $str = shift;
  my $log_handler = shift;
  if (defined $log_handler){
      print $log_handler ($str);
  }
  print ($str);  
}

sub setGeneralParams{
   #from ini file
   $MAIN_HOME_WIN = $hashTable{"MAIN_HOME_WIN"}; 
   $MAIN_REPORT_FILE = $hashTable{"MAIN_REPORT_FILE"};
   $FILE_TO_SEND = $hashTable{"FILE_TO_SEND"};
   $BAT_CMD = $hashTable{"BAT_CMD"}; 
   $MAIL_CMD = $hashTable{"MAIL_CMD"};
   $MAIL_HEADER = $hashTable{"MAIL_HEADER"};
   $MAIL_HEADER_TEMPLATE = $hashTable{"MAIL_HEADER_TEMPLATE"};
   $MAIL_FOOTER = $hashTable{"MAIL_FOOTER"};
   $MAP_DRIVE_LOCAL = $hashTable{"MAP_DRIVE_LOCAL"};   
   $FORMAT_TYPE = $hashTable{"FORMAT_TYPE"};
   
   #concatenations
   $MAIL_PATH=$MAIN_HOME_WIN."\\"."Mail";

   #report
   print $display_delimiter;
   print "Running With General Parameters:"."\n";
   print "MAIN_HOME_WIN: ".$MAIN_HOME_WIN."\n";
   print "MAIN_REPORT_FILE: ".$MAIN_REPORT_FILE."\n";
   print "FORMAT_TYPE: ".$FORMAT_TYPE."\n";
   print $display_delimiter;
}


sub formatReportFile{
    my $log_handler = shift;
my $sourceFile = shift;
my $targetFile = shift;
my $header=shift;
my $footer=shift;
print "Will use source_file: ".$sourceFile." and target file: ".$targetFile."\n";
    $result=system($^X,"format_db_report.pl",$sourceFile,$targetFile, $header,$footer,$FORMAT_TYPE);
$result;
}

sub handleStatus{
  my $status = shift;
  my $method = shift;
  my $log_handler = shift;
  
  if ($status != 0){
    if (defined $log_handler){
printMultipath ("Error in Routine: ".$method." Status: ".$status."\n",$log_handler);
}else{
print ("Error in Routine: ".$method." Status: ".$status."\n");
}
return $status;
  }
  $status;
}

sub getReportNameToSend{
  my $i_line='';
  open IN_FILE,$MAIN_REPORT_FILE or die $!;
  while (my $i_line = <IN_FILE>){
    $reportFileName =  $i_line;
  }
  my $strLenght = length $reportFileName;
  $reportFileName = $MAP_DRIVE_LOCAL.substr $reportFileName, 1 ,($strLenght-1);
  print "Will fetch File ".$reportFileName."\n";
  close IN_FILE or die $!;
}

sub getRunDate{
  my $file = shift;
  my $file_length=length($file);
  my $timestamp_length=length('YYYYMMDD_hhmmss.rep');
  my $run_date_time=substr $file,(-$timestamp_length-1);
  my $run_date=substr $run_date_time,0,length('YYYYMMDD');
  my $run_date_str=(substr $run_date,0,4)."-".(substr $run_date,4,2)."-".(substr $run_date,6,2);
  $run_date_str;
}

sub formatMailHeader{
  my $inputFileName=$reportFileName;
  my $updateHeaderFileName=$mailHeaderFile;
  my $inputHeaderFileName=$mailHeaderTemplateFile;
  my $runDate=getRunDate($inputFileName);
  my $i_line='';

  print "About to delete file ".$updateHeaderFileName."\n";
  unlink $updateHeaderFileName;

  print "Opening file for Input ".$inputHeaderFileName."\n";
  open IN_FILE,$inputHeaderFileName or die $!;
  open OUT_FILE,">",$updateHeaderFileName or die $!;
  
  while ($i_line=<IN_FILE>){
   $i_line =~ s/YYYY-MM-DD/$runDate/;   
   print OUT_FILE sprintf($i_line);
  }
  close IN_FILE or die $!;
  close OUT_FILE or die $!;  
  print "Done working on MailHeader"."\n";
}

#==================================
# The code starts here
#==================================

   $result=main();
   exit $result; 
   
#==================================
# sub main
#==================================
sub main{   
   no warnings 'uninitialized'; 
   
   readIniFile("$INI_FILE"); 
   setGeneralParams();
   fileFullPathNames();
   getReportNameToSend();
   formatMailHeader();
   $result=formatReportFile(undef,$reportFileName,$fileToSend,$mailHeaderFile,$mailFooterFile);
   handleStatus($result, "formatReportFile",undef); 
   sendMail();
}

format_db_report.pl
#====================================================
# Declaration
#====================================================
my $pl_script_name='';
my $sourceFile='';
my $targetFile='';
my $headerFile = '';
my $footerFile = '';
my $reportStyle = '';
my $status='0';

my $header="GATE_NAME                                          REFRESH_LOG_ENTRIES";
my $hliner="-------------------------------------------------- -------------------";
my $style_html = 'HTML';
#====================================================
# Sub routines Start Here
#====================================================

sub reportInputParams{
print "Input Parameters:"."\n";
print "sourceFile = ".$sourceFile."\n";
print "targetFile = ".$targetFile."\n";
print "reportStyle = ".$reportStyle."\n";
}
sub handleTextStyle{
  my $sourceFile = shift;
  my $targetFile = shift;
  
  my $line_counter=0;
  open IN_FILE,$sourceFile or die $!;
  open OUT_FILE,">>",$targetFile or die $!;
  
  print OUT_FILE $header."\n";
  print OUT_FILE $hliner."\n";
  
  while ($i_line = <IN_FILE>){
   $line_counter+=1;
   @words=split(" ",$i_line);
   $db_name=@words[0];
   $enrties=@words[1];
   if ($enrties > 0){
  print OUT_FILE sprintf("%-50s %-10s\n",$db_name,$enrties);
   }
  }
  close IN_FILE or die $!;
  close OUT_FILE or die $!;  
}

sub handleHtmlStyle{
  my $sourceFile = shift;
  my $targetFile = shift;
  
  my $line_counter=0;
  
  open IN_FILE,$sourceFile or die $!;
  open OUT_FILE,">>",$targetFile or die $!;  
  
  print OUT_FILE "<TABLE border=\"1\">";
  
  while ($i_line = <IN_FILE>){
  
   $line_counter+=1;
   @words=split(" ",$i_line);
   $db_name=@words[0];
   $enrties=@words[1];
print $i_line."\n";
if ($line_counter == 1){
 #This is a header Line
 print OUT_FILE "<THEAD>";
 print OUT_FILE "<TR><TD><b><p>".$db_name."</p></b></TD><TD><b><p>".$enrties."</p></b></TD></TR>";
 print OUT_FILE "</THEAD>";
 #print OUT_FILE sprintf("%-50s %-10s\n",$db_name,$enrties);
}

if ($line_counter == 2){
 #This is a underline Line
 print OUT_FILE "<TBODY>";
}

if ($line_counter > 2){
      if ($enrties > 0){
   #print OUT_FILE "Z";
   print OUT_FILE "<TR><TD><p>".$db_name."</p></TD><TD align=\"right\"><p>".$enrties."</p></TD></TR>";
      }
}
  }
  print OUT_FILE "</TBODY>";
  print OUT_FILE "</TABLE>";
  
  close IN_FILE or die $!;
  close OUT_FILE or die $!;

}
sub readAndWrite{
  $status='0';
  my $sourceFile = shift;
  my $targetFile = shift;
  my $headerFile = shift;
  my $footerFile = shift;
  my $reportStyle = shift;
  
  my $i_line='';
  my $o_line='';
    
  my $header_ind='Y';
  my @words;
  
  my $db_name='';
  my $enrties='';
  
  #=================================
  #Add Header
  #=================================
  open IN_FILE,$headerFile or die $!;
  open OUT_FILE,">",$targetFile or die $!;
  
  print OUT_FILE "\n";
  while ($i_line = <IN_FILE>){
    print OUT_FILE $i_line;
  }
  print OUT_FILE "\n";
  print OUT_FILE "\n";
  print OUT_FILE "\n";
  
  close IN_FILE or die $!;
  close OUT_FILE or die $!;
  #=================================
  #Add Contents
  #=================================
  
  
  if ($reportStyle eq $style_html){
    handleHtmlStyle($sourceFile,$targetFile);
  }

  
  #=================================
  #Add Footer
  #=================================
  open IN_FILE,$footerFile or die $!;
  open OUT_FILE,">>",$targetFile or die $!;
  print OUT_FILE "\n";
  print OUT_FILE "\n";
  print OUT_FILE "\n";
  while ($i_line = <IN_FILE>){
    print OUT_FILE $i_line;
  }
  print OUT_FILE "\n";
  
  close IN_FILE or die $!;
  close OUT_FILE or die $!;

  $status;
}

#====================================================
# Code Start Here
#====================================================
  $pl_script_name="format_db_report.pl";
  $sourceFile = shift;
  $targetFile = shift;
  $headerFile = shift;
  $footerFile = shift;
  $reportStyle= shift;
  
  #print "Inside ".$pl_script_name."\n";
  reportInputParams();
  $status=readAndWrite($sourceFile, $targetFile, $headerFile, $footerFile,$reportStyle);
  exit $status;
#====================================================
# Code End Here
#====================================================


send_report.ini
MAIN_HOME_WIN=D:\Reports\refresh_report\send_report
MAIN_REPORT_FILE=L:\refresh_report\last_db_report.txt
FILE_TO_SEND=daily_refreh_report.html
BAT_CMD=main_from_perl.bat
MAIL_CMD=sendMail.bat
MAIL_HEADER=mail_header.txt
MAIL_HEADER_TEMPLATE=mail_header_template.txt
MAIL_FOOTER=mail_footer.txt
MAP_DRIVE_LOCAL=L
FORMAT_TYPE=HTML


sendMail.bat
blat %1 -to alexandra.takchuk@starhomemach.com -cc userA@starhomemach.com,UserB@starhomemach.com,userC@starhomemach.com,alec.kaplan@starhomemach.com -i FromUser@starhome.com -subject "Refresh Log On Gates Report." -html

mail_header.txt
<html xmlns:v="urn:schemas-microsoft-com:vml" 
      xmlns:o="urn:schemas-microsoft-com:office:office" 
 xmlns:w="urn:schemas-microsoft-com:office:word" 
 xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" 
 xmlns="http://www.w3.org/TR/REC-html40">
<head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1255">
  <meta name=Generator content="Microsoft Word 14 (filtered medium)">
  <style>
    H1 {color:red;}
    H2 {color:red;}
p {color:blue;}
  </style>
</head>
  <body>
   <p>
Hi,
<br>
&nbsp;&nbsp;&nbsp;Please see results of the Refresh Log on Gates Report.
</p>
<H2>
Refresh Log Report for 2015-11-08
</H2>


mail_footer.txt
<br>
<font color="green">
Regards,<BR>
MIS Department<BR>
StarhomeMach<BR>
</font>

 </body>
</html>


mail_header_template.txt
<html xmlns:v="urn:schemas-microsoft-com:vml" 
      xmlns:o="urn:schemas-microsoft-com:office:office" 
 xmlns:w="urn:schemas-microsoft-com:office:word" 
 xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" 
 xmlns="http://www.w3.org/TR/REC-html40">
<head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1255">
  <meta name=Generator content="Microsoft Word 14 (filtered medium)">
  <style>
    H1 {color:red;}
    H2 {color:red;}
p {color:blue;}
  </style>
</head>
  <body>
   <p>
Hi,
<br>
&nbsp;&nbsp;&nbsp;Please see results of the Refresh Log on Gates Report.
</p>
<H2>
Refresh Log Report for YYYY-MM-DD
</H2>


optional_reciepients.txt
UserD@starhomemach.com,

daily_refreh_report.html

<html xmlns:v="urn:schemas-microsoft-com:vml" 
      xmlns:o="urn:schemas-microsoft-com:office:office" 
 xmlns:w="urn:schemas-microsoft-com:office:word" 
 xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" 
 xmlns="http://www.w3.org/TR/REC-html40">
<head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1255">
  <meta name=Generator content="Microsoft Word 14 (filtered medium)">
  <style>
    H1 {color:red;}
    H2 {color:red;}
p {color:blue;}
  </style>
</head>
  <body>
   <p>
Hi,
<br>
&nbsp;&nbsp;&nbsp;Please see results of the Refresh Log on Gates Report.
</p>
<H2>
Refresh Log Report for 2015-11-08
</H2>



<TABLE border="1"><THEAD><TR><TD><b><p>GATE_NAME</p></b></TD><TD><b><p>REFRESH_LOG_ENTRIES</p></b></TD></TR></THEAD><TBODY><TR><TD><p>vip700/vip700@AGO-MOVIC-01_VNODE</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>vip700/vip700@ARG-PERSO-01_VNODE</p></TD><TD align="right"><p>2037</p></TD></TR><TR><TD><p>vip700/vip700@AUS-VODAF-01_VNODE</p></TD><TD align="right"><p>820107</p></TD></TR><TR><TD><p>vip700/vip700@AZE-AZERF-01-VNODE</p></TD><TD align="right"><p>10</p></TD></TR><TR><TD><p>vip700/vip700@BGR-MOBIL-01_VNODE</p></TD><TD align="right"><p>559834</p></TD></TR><TR><TD><p>vip700/vip700@BOL-TELEC-01_VNODE</p></TD><TD align="right"><p>803490</p></TD></TR><TR><TD><p>vip700/vip700@BRA-TIMRN-01_VNODE</p></TD><TD align="right"><p>1031</p></TD></TR><TR><TD><p>vip700/vip700@DOM-CLARO-VHE</p></TD><TD align="right"><p>10455</p></TD></TR><TR><TD><p>vip700/vip700@ECU-CONEC-01_VNODE</p></TD><TD align="right"><p>23</p></TD></TR><TR><TD><p>vip700/vip700@FRA-BYTEL-01_VNODE_NEW</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>vip700/vip700@FRA-SFRQQ-01_VNODE</p></TD><TD align="right"><p>1031</p></TD></TR><TR><TD><p>vip700/vip700@GBR-VODAF-03_VHE</p></TD><TD align="right"><p>1031</p></TD></TR><TR><TD><p>GTM_PCSDI_VHEQQ/GTM_PCSDI_VHEQQ@GTM_PCSDI_VHEQQ</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>vip700/vip700@HKG-PEOPLE-01_VNODE</p></TD><TD align="right"><p>28</p></TD></TR><TR><TD><p>vip700/vip700@HKG-SMART-01</p></TD><TD align="right"><p>27</p></TD></TR><TR><TD><p>vip700/vip700@IDN-PTEXC-01_VNODE</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>vip700/vip700@IDN-TELKOMCELL-VHE</p></TD><TD align="right"><p>849095</p></TD></TR><TR><TD><p>vip700/vip700@IRL-EIRCE-01_VNODE</p></TD><TD align="right"><p>496</p></TD></TR><TR><TD><p>vip700/vip700@KWT-MTCQQ</p></TD><TD align="right"><p>17111</p></TD></TR><TR><TD><p>vip700/vip700@MDG-TELMA-01_VNODE</p></TD><TD align="right"><p>4</p></TD></TR><TR><TD><p>vip700/vip700@MEX-TELCE-01_VNODE</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>MKD_NOVIO_VHEQQ/MKD_NOVIO_VHEQQ@MKD_NOVIO_VHEQQ</p></TD><TD align="right"><p>252971</p></TD></TR><TR><TD><p>vip700/vip700@MLT-VODAF-01_VNODE</p></TD><TD align="right"><p>1057</p></TD></TR><TR><TD><p>vip700/vip700@MWI-TELEC-01_VNODE</p></TD><TD align="right"><p>67</p></TD></TR><TR><TD><p>vip700/vip700@MYS-CELCO-01_VNODE</p></TD><TD align="right"><p>318</p></TD></TR><TR><TD><p>vip700/vip700@NGA-GLOMO-01_VNODE</p></TD><TD align="right"><p>1015</p></TD></TR><TR><TD><p>NIC_PCSDI_VHEQQ/NIC_PCSDI_VHEQQ@NIC_PCSDI_VHEQQ</p></TD><TD align="right"><p>708935</p></TD></TR><TR><TD><p>VIP700/VIP700@PHL-DIGIT-01_VNODE</p></TD><TD align="right"><p>2012</p></TD></TR><TR><TD><p>vip700/vip700@PRU-TIMPR_VNODE</p></TD><TD align="right"><p>623321</p></TD></TR><TR><TD><p>vip700/vip700@SGP-MOBIL-01_VNODE</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>SLV_CTETE_VHEQQ/SLV_CTETE_VHEQQ@SLV_CTETE_VHEQQ</p></TD><TD align="right"><p>254607</p></TD></TR><TR><TD><p>VIP700/VIP700@ATN-TELCE-01_VNODE</p></TD><TD align="right"><p>1031</p></TD></TR><TR><TD><p>vip700/vip700@SYC-CABWI-01_VNODE</p></TD><TD align="right"><p>1</p></TD></TR><TR><TD><p>ZWE_PTCOR_VHEQQ/ZWE_PTCOR_VHEQQ@ZWE_PTCOR_VHEQQ</p></TD><TD align="right"><p>38</p></TD></TR></TBODY></TABLE>


<br>
<font color="green">
Regards,<BR>
MIS Department<BR>
StarhomeMach<BR>
</font>

</body>
</html>

And as html file: