Ich versuche einen dbms_scheduler-Job innerhalb einer gespeicherten Prozedur zu erstellen, nachdem eine Logik ausgeführt wurde. Mein Prozedurcode ist wie folgt. Das Problem besteht darin, dass der Scheduler-Code nicht ausgeführt wird und die Prozedur zum Zeitpunkt des Erstellens des Jobs keine Ausnahme auslöst. Der Job erstellt eine Feinabstimmung, wenn er unabhängig als anonymer Block ausgeführt wird. Ist das der richtige Weg, um das zu erreichen, was ich versuche?dbms_scheduler erstellt keinen Job, wenn er in einer gespeicherten Prozedur erstellt wird
create or replace procedure PROC_INS_TEST AS
v_success varchar2(255) := '1';
v_job_name varchar2(255);
BEGIN
SELECT 'TEST' || dbms_scheduler.generate_job_name into v_job_name
FROM DUAL;
INSERT INTO T_TEMP_STAGING--log table
(job_id, process_name) VALUES (1, 'TEST');
Commit;
v_success := '1';
BEGIN
sys.dbms_scheduler.create_job (
job_name => v_job_name,
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN PROC_TEST_SCHEDULER; END;',
--start_date => sysdate,
--repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
enabled => TRUE);
END;
dbms_output.put_line(v_success);
EXCEPTION
WHEN OTHERS THEN
v_success = '0';
ROLLBACK;
RETURN;
END PROC_INS_TEST;
Wie wissen Sie es nicht eine Ausnahme wirft, wenn Sie irgendetwas sind fangen sie mit werfen 'wenn andere' Sehen Sie das 'dbms_output'-Ergebnis, das nur 1 sein kann, oder erscheint das nicht - was bedeutet, dass Sie in den Ausnahmebehandler gegangen sind? Wie auch immer, ist Ihre Erlaubnis, einen Job zu erstellen, der durch eine Rolle oder direkt für Ihren Benutzer gewährt wird? –
Ups, ich gab gerade die Ausnahme nicht aus. Ich sehe, dass es nicht genügend Privilegfrage ist. Es wurde durch Rollen gewährt. Es funktioniert einwandfrei, nachdem dem Benutzer entsprechende Berechtigungen erteilt wurden. Danke Alex Poole. – DG3
Es ist fast immer besser, die Ausnahme einfach weitergeben zu lassen, anstatt "wenn andere" zu verwenden und die Ausnahme selbst anzuzeigen. für den Anfang hat der Aufrufer möglicherweise nicht "dbms_output" aktiviert; und der PL/SQL-Block, von dem dieser aufgerufen wird, kann nicht groß werden, wenn er tatsächlich erfolgreich war. –