Announcement

Collapse
No announcement yet.

Wie UPDATE-Job einrichten?

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

  • Wie UPDATE-Job einrichten?

    Hallo,

    sorry für die Frage, aber ich habe mit Jobs noch so gut wie nichts gemacht.

    Ich möchte regelmäßig eine UPDATE-Statement über die Datenbank jagen.

    Also sowas z.B.:

    Code:
    update TAB1 z
    set ATTR1='Name_' ||
                        (select NUM from TAB2 q where z.ID=q.ID) ||
                        '_(' ||
                        ID2 ||
                        ')'
    where ID=(select ID from TAB2 s
                   where z.ID=s.ID)
    ;
    commit;

    Der Job soll z.B. jeden Tag um 21:00 Uhr laufen.

    Wie richte ich den Job dazu ein?

    Am besten per SQL-Script oder auch über TOAD.

    Danke.


    Gruß
    meute

  • #2
    Beispiel:
    1. Update in eine gespeicherte Prozedur hinterlegen.

    Code:
    CREATE OR PROCEDURE p_job
       IS
       BEGIN
    	update TAB1 z
    set ATTR1='Name_' ||
                        (select NUM from TAB2 q where z.ID=q.ID) ||
                        '_(' ||
                        ID2 ||
                        ')'
    where ID=(select ID from TAB2 s
                   where z.ID=s.ID)
    ;
    commit;
    END;
    /
    2. Job einrichten
    Code:
    BEGIN
    	dbms_job.submit (:jobnummer,
    			'p_job;',
    			-- hier deine Startzeit ,
    			-- hier Angabe des Zeitintervalls);
    END;
    /
    Startzeit als Date-Wert und Zeitintervall als VARCHAR2-Wert eingeben.

    kuemmelchen

    Comment


    • #3
      Hallo,

      danke für Deine Antwort.

      Die Prozedur habe ich angelegt.

      Aber mit dem Job habe ich noch Probleme.

      Originally posted by kuemmelchen View Post
      Beispiel:
      2. Job einrichten
      Code:
      BEGIN
      	dbms_job.submit (:jobnummer,
      			'p_job;',
      			-- hier deine Startzeit ,
      			-- hier Angabe des Zeitintervalls);
      END;
      /
      Mein Code sieht im Moment so aus, funktioniert aber leider nicht.

      Code:
      BEGIN
          DBMS_JOB.SUBMIT (901,
                             'PROZEDUR_4711;',
                             to_date('21:00:00','hh24:mi:ss'),
                             'HH24'
                            );
      END;
      /
      901=Jobnummer

      Könntest Du den bitte verbessern?

      Danke.


      Gruß
      meute

      Comment


      • #4
        HH24 ist keine Funktion die einen Datumswert zurückliefert. Das genau macht nämlich Oracle wenn der Job gelaufen ist.
        Gültig wäre z.B. 'SYSDATE+1' Das wäre immer einen Tag später.

        Eleganter geht es mit DBMS_SCHEDULER den man ab 10g auch verwenden sollte. Ein Beispiel wie das aussieht gibt es hier.

        Des weiteren ist jobnumber ein OUT Parameter. D.h. Du übergibst eine Variable und Oracle schreibt hinein welche Jobnummer es vergeben hat:
        Code:
        DECLARE
         l_jobnumber BINARY_INTEGER;
         BEGIN
            DBMS_JOB.SUBMIT (l_jobnumber,
                               'PROZEDUR_4711;',
                               to_date('21:00:00','hh24:mi:ss'),--Hier fehlt auch noch die Datumsangabe. 21 Uhr an welchem Tag?
                               'SYDATE+1'
                              );
         COMMIT; --Ganz wichtig, sonst wird die Änderung nicht wirksam und der Job läuft nicht.
        END;
        /
        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Hallo dimitri,

          danke.

          Originally posted by dimitri View Post
          Eleganter geht es mit DBMS_SCHEDULER den man ab 10g auch verwenden sollte. Ein Beispiel wie das aussieht gibt es hier.
          Ich habe den Job nun mit dem DBMS_SCHEDULER angelegt.
          Mal sehen ob er heute Abend läuft.

          Weisst Du, ob man sich im TOAD den Inhalt von "dba_scheduler_jobs" anzeigen lassen kann?

          Unter "Views" taucht sie jedenfalls nicht auf.


          Gruß
          meute

          Comment


          • #6
            Weisst Du, ob man sich im TOAD den Inhalt von "dba_scheduler_jobs" anzeigen lassen kann?
            Vermutlich hast Du keine Berechtigung darauf. dba_ Views können auch nur von Usern mit entsprechenden Rechten angesehen werden. Für dich wäre user_scheduler_jobs die richtige View.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment


            • #7
              Hallo,

              Originally posted by dimitri View Post
              Vermutlich hast Du keine Berechtigung darauf. dba_ Views können auch nur von Usern mit entsprechenden Rechten angesehen werden. Für dich wäre user_scheduler_jobs die richtige View.

              Dim
              Mit einem SELECT auf "dba_scheduler_jobs" kann ich den Inhalt schon sehen.

              Im TOAD muss ich aber als SYS-User angemeldet sein, damit unter "Views" die "dba_..."-Views auftauchen.


              Gruß
              meute

              Comment

              Working...
              X