Bonjour,

Je suis en train de porter une procedure d'Informix vers Oracle. Celle-ci lance un script shell, et je dois donc faire la meme chose (non, je ne peux vraiment pas changer).

En informix, la commande etait "simplement"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SYSTEM ("/mon/script/qui/va/bien.sh arg1 arg2")
Pour PL/SQL, j'ai trouve le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE OR REPLACE PROCEDURE test_dbms_scheduler
AS
   v_text   VARCHAR2 (255) := 'Parameter passed from Oracle to Unix';
BEGIN
   DBMS_OUTPUT.put_line ('I am in Procedure');
 
   DBMS_SCHEDULER.create_job (
      job_name              => 'test_dbms_scheduler',
      job_action            => '/usr/bin/test_dbms_scheduler.ksh',
      number_of_arguments   => 1,
      job_type              => 'executable',
      start_date            => SYSDATE,
      enabled               => FALSE,
      comments              => 'Run shell-script test_dbms_scheduler.ksh'
   );
 
 
 
   DBMS_SCHEDULER.set_job_argument_value (job_name            => 'test_dbms_scheduler',
                                          argument_position   => 1,
                                          argument_value      => v_text);
 
   DBMS_SCHEDULER.enable ('test_dbms_scheduler');
 
 
   DBMS_OUTPUT.put_line ('I am back in Procedure');
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLCODE || SQLERRM);
END;

A force de regarder, je me suis rendu compte que create_job n'etait pas forcement ideal, et sur cette page, j'ai trouve create_program, qui semble plus adapte a mon cas, mais qui ne semble pas plus cooperative sur le nombre de caracteres que je peux lui fournir.

D'ou mes questions :
1/ Est-ce que c'est la bonne maniere pour lancer un script depuis une procedure (attention, je ne demande pas si cette idee est bonne, je connais tres bien la reponse) ?
2/ Est-ce qu'il y a 100 fois mieux ?

Merci,
Gangsoleil

[edit] J'ai resolu mon probleme de ligne trop longue, qui existait a cause de l'emploi de " au lieu de '

PS : je suis ouvert a toutes les propositions tant que ca reste une procedure
PPS : N'hesitez pas etre complet dans vos reponses, je ne suis pas vraiment un specialiste PL/SQL - a moins que ca ne soit "vraiment pas"...