toobeee Geschrieben 14. Mai 2009 Teilen Geschrieben 14. Mai 2009 hi hab hier eine tabelle test mit 2 spalten oid und beschreibung create tabel test ( oid integer, beschreibung varchar2(50) ); und ich möchte jetzt über dem dbms_job.submit() eine proecude ausführen die einen datensatz in dieser testtabelle aktualisiert(ist 1 datensatz drin mit oid = 1). das starten des jobs passiert, ich krig ich eine job-id. aber es passiert nichts. hier min code: create or replace procedure blabla is begin update test set bezeichnung ='hiho' where oid = 1; commit; end; / set serveroutput on; declare nr integer; begin dbms_job.submit(job => nr, what =>'BEGIN blabla; END;', next_date => sysdate); end; / eigentlich sollte der beschreibungstext jetzt geändert sein, ist er aber nicht. es passiert augenscheinlich nichts. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 14. Mai 2009 Teilen Geschrieben 14. Mai 2009 Nach dem submit musst Du ein commit ausführen. Mit deinem next Wert wird der Job allerdings ständig neu gestartet willst Du das wirklich? Falls Du 10g verwendest, solltest Du auch prüfen, ob Du dbms_scheduler verwenden kannst/möchtest. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
toobeee Geschrieben 15. Mai 2009 Autor Teilen Geschrieben 15. Mai 2009 ok, das ist ne aufgabe von der uni, man soll submit() verwenden. ist glaub ich 11g sogar. begin dbms_job.submit (job => v_jobno, what => 'testjob;', next_date => sysdate, interval => 'sysdate + numtodsinterval(5,''minute'')' ); dbms_output.put_line('Jobnumber: ' || v_jobno); dbms_job.run (v_jobno); commit; end; / es funktioniert den job zu starten wenn ich explizit run(job-id) ausführe. Wenn nicht tut sich da allerdings gar nicht. Ich kann nicht ausschließen das da noch irgendwo was falsch eingestellt ist, die uni hat erst vor kurzem auf 11g gewechselt - wäre es denkbar das da noch was falsch eingestellt ist? meinen job seh ich unter den user_jobs, der intervall ist ebenfalls korrekt eingetragen. einmalig ausführen funktioniert nur mit run(). Aber der intervall greift gar nicht. hier ist ein kompletter testfall, der wohl funktionieren soll (bei mir nicht) (in der tabell test den Beschreibungstext updaten) - relativ sinnfrei, nur ein beispiel halt. drop table test; create table test ( oid integer, beschreibung varchar2(50) ); insert into test values (1, 'asdf'); insert into test values (2, 'lalalalla'); commit; create or replace procedure testjob is begin update test set beschreibung ='hiho' where oid = 1; commit; exception when others then raise_application_error(-20001, 'Procedure testjob caused an ERROR!! Message: '||sqlerrm); end; / show errors; set serveroutput on; declare v_jobno binary_integer; v_interval varchar2(20) := 'sysdate+1/(24*60)'; begin dbms_job.submit ( v_jobno, 'testjob;', sysdate, v_interval); dbms_output.put_line('Jobnummer: ' || v_jobno || 'Interval: '|| v_interval); commit; end; / show errors klappt bei mir wieder nur wenn ich run() einfüge, der intervall klappt aber auch hierbei nicht. noch eine idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.