Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[oracle]

None
6 antwoorden
  • ik wil graag een trigger op de serverkant zetten die elke dag afgaat,
    de trigger moet zoeken in een tabel en hij moet de waarden van een veld aanpassen als ze aan een bepaalde voorwaarden voldoen.

    iemand een idee
  • [quote:a8d330399c="fcgforum"]ik wil graag een trigger op de serverkant zetten die elke dag afgaat,
    de trigger moet zoeken in een tabel en hij moet de waarden van een veld aanpassen als ze aan een bepaalde voorwaarden voldoen.[/quote:a8d330399c]
    Alternatieven:
    - Insert/Update-trigger?
    - Tabel constraint?
    - Record constraint?

    - Oracle script die via e.o.a. automatische functie uitgevoerd wordt (bijvoorbeeld Windows AT/scheduler).
    Daarbij hangt het ook af of het gewenst is dat andere gebruikers tegelijkertijd mogen lezen en/of schrijven.
  • Is niet erg ingewikkeld.

    Maak een package aan met een functie die de gewenste functionaliteit voor jou regelt. Het opzoeken en aanpassen van data. Ik neem even aan dat je PL/SQL blocks en packages kunt schrijven.

    Vervolgens open je SQL-plus en log je in met de user, waaronder je deze acties wilt laten doen.

    Open notepad en tik de volgende code in:

    [code:1:16d8f49609]
    variable job number;
    begin
    dbms_job.submit(:job
    ,'packagenaam.functienaam;'
    , trunc(sysdate+1) + 3/24
    , 'trunc(sysdate+1) + 3/24');
    end;
    /
    SELECT d.JOB "Job No"
    , to_char(d.last_date,'dd-mm-yyyy hh24:mi:ss') "Last Run"
    , to_char(d.next_date,'dd-mm-yyyy hh24:mi:ss') "Next Run"
    , DECODE(d.BROKEN,'Y','* Broken', DECODE(sign(d.failures),0,DECODE(r.job,null,null,'* Running'), '* Failed - (' || d.failures || ') times')) "Status"
    , SUBSTR(d.what,1,30) "What"
    FROM user_jobs d
    , dba_jobs_running r
    WHERE d.job = r.job(+)
    ORDER BY d.job
    /
    COMMIT
    /
    [/code:1:16d8f49609]

    De call naar dbms.job_submit voegt een job toe. De eerste parameter is een returnwaarde met het nummer van de job, de tweede de functie die moet worden gestart, de derde de eerste keer dat de job moet worden gerund en tot slot de interval waarop deze moet worden gerund.

    In mijn voorbeeld is dit dus:

    param 2: start 'packagenaam.functienaam'
    param 3: eerste keer op systeemdatum + 1 (morgen) om 3 uur 's nachts
    param 4: daaropvolgende keren steeds de volgende dag om 3 uur 's nachts.

    De select daarna geeft een overzicht van alle jobs die zijn toegevoegd voor deze user en of deze al een hebben gedraaid, nog moeten draaien, wanneer en wat de uitkomst was.

    Tot slot moet je in Oracle deze functionaliteit nog even enablen.

    Via Instance – > Database naar Initialization Parameters de volgende waarden aanpassen:

    * job_queue_processes –> 2
    * job_queue_interval –> 60

    De eerste geeft aan hoeveel processen op de achtergrong controleren op jobs, de tweede om de hoeveel tijd hij dit doet (sec). Eventueel kan je de laatste op een andere waarde zetten, al naar gelang je behoefte. In dit geval zal de job om maximaal 3:01 gelopen hebben.

    Greetz,

    Taz
  • Is niet erg ingewikkeld.

    Maak een package aan met een functie die de gewenste functionaliteit voor jou regelt. Het opzoeken en aanpassen van data. Ik neem even aan dat je PL/SQL blocks en packages kunt schrijven.

    Vervolgens open je SQL-plus en log je in met de user, waaronder je deze acties wilt laten doen.

    Open notepad en tik de volgende code in:

    [code:1:71575ebcba]
    variable job number;
    begin
    dbms_job.submit(:job
    ,'packagenaam.functienaam;'
    , trunc(sysdate+1) + 3/24
    , 'trunc(sysdate+1) + 3/24');
    end;
    /
    SELECT d.JOB "Job No"
    , to_char(d.last_date,'dd-mm-yyyy hh24:mi:ss') "Last Run"
    , to_char(d.next_date,'dd-mm-yyyy hh24:mi:ss') "Next Run"
    , DECODE(d.BROKEN,'Y','* Broken', DECODE(sign(d.failures),0,DECODE(r.job,null,null,'* Running'), '* Failed - (' || d.failures || ') times')) "Status"
    , SUBSTR(d.what,1,30) "What"
    FROM user_jobs d
    , dba_jobs_running r
    WHERE d.job = r.job(+)
    ORDER BY d.job
    /
    COMMIT
    /
    [/code:1:71575ebcba]

    De call naar dbms.job_submit voegt een job toe. De eerste parameter is een returnwaarde met het nummer van de job, de tweede de functie die moet worden gestart, de derde de eerste keer dat de job moet worden gerund en tot slot de interval waarop deze moet worden gerund.

    In mijn voorbeeld is dit dus:

    param 2: start 'packagenaam.functienaam'
    param 3: eerste keer op systeemdatum + 1 (morgen) om 3 uur 's nachts
    param 4: daaropvolgende keren steeds de volgende dag om 3 uur 's nachts.

    De select daarna geeft een overzicht van alle jobs die zijn toegevoegd voor deze user en of deze al een hebben gedraaid, nog moeten draaien, wanneer en wat de uitkomst was.

    Tot slot moet je in Oracle deze functionaliteit nog even enablen.

    Via Instance – > Database naar Initialization Parameters de volgende waarden aanpassen:

    * job_queue_processes –> 2
    * job_queue_interval –> 60

    De eerste geeft aan hoeveel processen op de achtergrong controleren op jobs, de tweede om de hoeveel tijd hij dit doet (sec). Eventueel kan je de laatste op een andere waarde zetten, al naar gelang je behoefte. In dit geval zal de job om maximaal 3:01 gelopen hebben.

    Greetz,

    Taz
  • oeps, drie keer, sorry
  • oh, het ingetikte in notepad even opslaan als job.sql of zo en runnen in SQL-plus. Was ik ook nog vergeten.

    Gaat lekker, succes

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.