Announcement

Collapse
No announcement yet.

Datumsdifferenz festellen durch Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Hi kuemmelchen,
    Wie kann ich in einem Shell Skript durch deine Code Abschnitt das Ergebnis (also Zeit Differenz) ausgeben bzw. in einer Datei schreiben?

    Code:
    #!/bin/csh
    # directories
    set tempDir = "$HOME/temp/"
    set tempSqlQuery = "$HOME/temp/CheckSqlAwbLocker.sql"
    set targetSuffix = ".dat"
    set dailyReport = "$HOME/temp/Ergebnis$targetSuffix"
    
    
    ###############################
    ## build SQL Query 
    ###############################
    
    echo "set pagesize 0" > $tempSqlQuery
    echo "set linesize 800" >> $tempSqlQuery
    echo "set heading off" >> $tempSqlQuery
    echo "set headsep off" >> $tempSqlQuery
    echo "set feedback off" >> $tempSqlQuery
    echo "set trimspool on" >> $tempSqlQuery
    echo "set wrap off" >> $tempSqlQuery
    echo "set pause off" >> $tempSqlQuery
    echo "set trim on" >> $tempSqlQuery
    echo "set tab off" >> $tempSqlQuery
    echo "set space 1" >> $tempSqlQuery
    echo "set recsep off" >> $tempSqlQuery
    
    # echo "SELECT AWB, to_char( TMST, 'DD/MM/YY HH24:MI:SS' )" >> $tempSqlQuery
    # echo "FROM TDSOS_AWB_LOCKS " >> $tempSqlQuery
    # echo "WHERE TMST < (SYSDATE-(1/48));" >> $tempSqlQuery
    
    
    echo "DECLARE" >> $tempSqlQuery
    echo "mydaydate NUMBER;" >> $tempSqlQuery
    echo "tage number;" >> $tempSqlQuery
    echo "stunden number;" >> $tempSqlQuery
    echo "minuten number;" >> $tempSqlQuery
    echo "sekunden number;" >> $tempSqlQuery
    
    echo "zeit number;" >> $tempSqlQuery
    echo "datumstext varchar2(30);" >> $tempSqlQuery
    echo "datum date;" >> $tempSqlQuery
    
    echo "BEGIN" >> $tempSqlQuery
    echo "FOR zeiger IN (SELECT (SYSDATE - TMST) AS diff FROM TDSOS_AWB_LOCKS) LOOP" >> $tempSqlQuery
    echo "zeit := zeiger.diff;" >> $tempSqlQuery
    echo "tage := floor(zeiger.diff);" >> $tempSqlQuery
    
    echo "zeit := zeit - floor(zeit);" >> $tempSqlQuery
    echo "stunden := floor (zeit * 24); " >> $tempSqlQuery
    
    echo "zeit := zeit * 24 - floor(zeit * 24);" >> $tempSqlQuery
    echo "minuten := floor (zeit * 60); " >> $tempSqlQuery
    
    echo "zeit := zeit * 60 - floor(zeit * 60);" >> $tempSqlQuery
    echo "sekunden := floor (zeit * 60); " >> $tempSqlQuery
    
    echo "dbms_output.put_line(tage || ' Tage ' || stunden || ' Stunden ' || minuten || ' Minuten ' || sekunden || ' Sekunden');" >> $tempSqlQuery
    
    echo "END LOOP;" >> $tempSqlQuery
    echo "END;" >> $tempSqlQuery
    echo "/" >> $tempSqlQuery
    
    echo "quit;">>$tempSqlQuery
    
    		
    ###############################
    ## build sqlquery finish 
    ###############################
    
    #execute query
    
    sqlplus -s $DBMASTER_USER/$DBMASTER_PASSWORD @$tempSqlQuery > $dailyReport 
    
    set input = `cat $dailyReport`
    set i = 1 #Count of founded Data
    
    while ( $i <= $#input )
    
    	 echo "$input[$i]"
    	 
    	  @ i = $i + 1	 
    end
    	
    #cleanup
    #rm $tempSqlQuery
    
    echo "Erstellung der Daten erfolgreich beendet."
    Wenn ich die oben stehende Code ausführe, kriege ich kein Ergebnis

    Comment


    • #17
      Originally posted by beterman View Post
      Wenn ich die oben stehende Code ausführe, kriege ich kein Ergebnis
      Doch, das "Ergebnis" Deines Codes ist "neuer Code" in der Scriptdatei im Verzeichnis "$HOME/temp/CheckSqlAwbLocker.sql".

      Warum produzierst Du erst mit soviel Aufwand die Datei? Reicht es nicht, eine fertige zu nehmen? Oder ist das einfach eine Kopie von irgendwas aus dem Netz, von dem Du glaubst, dass es ungefähr das macht, was Du möchetst?

      Code:
      sqlplus user/pw@db @$HOME/temp/CheckSqlAwbLocker.sql
      Führt Deine Abfrage aus.

      Und es gibt meherere Möglichkeiten Ausgabe-Dateien zu erzeugen. Eine in sqlplus z.B.:
      Code:
      spool [ausgabedateiname.log]
      select ... 
      .. Befehle
      spool off
      exit
      Gruß, defo

      Comment


      • #18
        Hallo defo,
        es ist mir gerade klar, dass das "Ergebnis" ein Ausgabe Datei ist. Ich meinte aber ein Console Ausgabe über Putty.
        Danke im Voraus
        Gruß basay

        Comment


        • #19
          Originally posted by beterman View Post
          Hi kuemmelchen,
          Wie kann ich in einem Shell Skript durch deine Code Abschnitt das Ergebnis (also Zeit Differenz) ausgeben bzw. in einer Datei schreiben?
          Das war doch Deine Frage, oder?
          Irgendwie eierst Du mit Deinen Fragen hier ganz schön rum.

          Mir ist nun allerdings nicht mehr klar, was Du willst. Hat Dein vorgelegter Codeabschnitt irgendwas damit zu tun, was Du möchtest?
          Hast Du meine Antwort getestet bzw. in Dein Script eingebaut?
          Gruß, defo

          Comment


          • #20
            Hallo defo,
            Code:
            spool [ausgabedateiname.log]
            select ... 
            .. Befehle
            spool off
            exit
            hat irgendwie nicht geklappt.
            ich habe folgende Zeile hinzugefügt und erhalte nun endlich ein Console Ausgabe für sqlplus Abfrage, was ich mit
            Code:
            dbms_output.put_line
            ausgegeben habe.

            Code:
            #Bildschirmausgaben in SQL*Plus oder SQL Worksheet einschalten:
            set serveroutput on
            Vielen dank nochmals
            Gruß
            Basay

            Comment

            Working...
            X