bonjour
je suis sur une bdd oracle9i plateforme solaris et
je souhaite faire un appel à un shell(unix) depuis de mon pl/sql,
sachant que mon pl est deja dans un shell via une connexion sqlplus / .
est ce possible?
bonjour
je suis sur une bdd oracle9i plateforme solaris et
je souhaite faire un appel à un shell(unix) depuis de mon pl/sql,
sachant que mon pl est deja dans un shell via une connexion sqlplus / .
est ce possible?
j'ai testé, mais en vain.
Serait ce parce-que je suis en pl/sql et non en sqlplus.
j'essaie d'appele le prgr depuis n un bloc pl ie
begin
....
host mon_shell.ksh ma_variable ;
....
end;
Tu es sûr ?Envoyé par SheikYerbouti
Moi j'en suis resté à l'info que HOST est une commande de SQL*Plus, et qu'elle n'est pas disponible dans du PL...
ah oui, mille excuses ! le bloc pl/sql s'exécute au niveau du noyau...( honte sur moi...)
il vous faudrait passer par les external_calls...
voyez avec votre DBA
Dans un bloc PL il faut que tu utilises les librairies externes.
1. Crées une librairie C shell.c (par exemple)
2. Compile la
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <stdio.h> #include <stdlib.h> #include <string.h> void sh(char *); void sh( char *cmd ) { int num; num = system(cmd); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 make -f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_nocallback \SHARED_LIBNAME=shell.so OBJS=shell.o
3. Définis-la sous ORACLE :
4. Crées la procédure associée à la librairie qui permettra d'exécuter ta comande host en PL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE LIBRARY shell_lib IS 'chemin_complet/shell.so'; /
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE OR REPLACE PROCEDURE shell (cmd IN CHAR) AS EXTERNAL NAME "sh" LIBRARY shell_lib LANGUAGE C PARAMETERS ( cmd STRING);
merci pour les reponses!
Partager