2017-10-02 5 views
0

J'ai cherché un peu d'Internet avant de poser cette question, mais je n'ai pas trouvé de réponse. Petite question - le travail d'Oracle fonctionne-t-il avec DBMS_OUTPUT? Je veux écrire sur console un texte à intervalle donné, mais ça ne marche pas pour moi. Par exemple, je veux après toutes les 3 secondes écrire un horodatage sur la console.DBMS_SCHEDULER.CREATE JOB ne fonctionne pas avec DBMS_OUTPUT.PUT_LINE?

Travail - ne fonctionne pas.

Le programme Job +, ne fonctionne pas non plus.

programme de travail + + planificateur, ne fonctionne pas ...

Quelqu'un pourrait me donner quelques conseils comment l'obtenir? :)

Mon code exemple:

begin 
dbms_scheduler.create_job (
job_name =>  'some_job', 
job_type =>  'PLSQL_BLOCK', 
job_action =>  'BEGIN DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP); END;', 
start_date =>  SYSTIMESTAMP, 
repeat_interval => 'FREQ=SECONDLY; INTERVAL=3', 
end_date =>   NULL, 
enabled =>   TRUE, 
comments =>  'Example job.'); 
end; 
+4

salut, chaque travail signifie une session db oracle, chaque session a une mémoire tampon de sortie (console) pour lui-même, de sorte que votre problème est d'attraper la session et obtenir sa mémoire tampon de sortie – hmmftg

Répondre

3

Chaque travail est exécuté dans ses propres sessions distinctes à la vôtre; Votre console n'écouterait que la sortie de votre session, donc votre travail parle simplement dans le vide et son tampon de sortie est effacé avant d'être écrit n'importe où.

Depuis DBMS_OUTPUT est vraiment conçu comme un générateur de sortie de débogage très basique, ce n'est pas un problème. Si vous voulez voir l'état d'avancement de votre travail en temps réel, voici deux options à envisager:

  1. entrées Insérer journaux à une table personnalisée (validation peut-être à l'aide d'une opération autonome) - ou mieux encore, utilisez un cadre de journalisation existant comme Logger.

  2. Mise à jour de la session en utilisant DBMS_APPLICATION_INFO (par exemple l'utilisation set_action ou set_session_longops) - cela vous permettra de voir l'état actuel du travail que, cependant.

+0

Vous avez raison Jefferey - quand J'ai fait une sélection sur USER_SCHEDULER_JOB_RUN_DETAILS avec le nom de mon travail, la colonne SESSION_ID a des valeurs différentes pour chaque ligne. Je pense que mon cas est simple à faire - simple, comme le code dans ma question originale, mais la vie montre que ce n'est pas .. Merci pour votre aide :) –