Lancer un script depuis une procedure
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:
SYSTEM ("/mon/script/qui/va/bien.sh arg1 arg2")
Pour PL/SQL, j'ai trouve le code suivant :
Code:
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"...