probleme avec sqlplus - Perl - Programmation
Marsh Posté le 01-12-2006 à 14:38:26
je peux pas,j'ai des soucis et par rapport à l'outil que je vais utiliser ensuite, il faut que j'utilise sqlplus
j'ai essayer cela
Code :
|
quandd j'appel mon script j'ai ça en sortie
Citation : |
??
Marsh Posté le 01-12-2006 à 14:40:16
Marsh Posté le 01-12-2006 à 16:22:16
déjà, tu commences par tester ta commande système sans l'envelopper dans du perl, tu verras que tu auras le mm problème : dans ce cas là, voir comment on utilise sqlplus
ensuite, pour passer des requêtes sql, je te conseiller d'utiliser DBI avec DBD Oracle, cela te simplifieras la tâche
Marsh Posté le 01-12-2006 à 16:37:25
en faite j'ai fait cela
Code :
|
sa fonctionne mais le probleme c'est le code de retour, il est toujours = 0 en cas de succes ou d'echec;
donc je pensai faire cela
Code :
|
mais le probleme est que system ne prend en compte que ce qu'il y a sur la premiere ligne et pas les autres
Marsh Posté le 01-12-2006 à 16:55:00
Quand tu parles de succès ou d'échec, c'est celui de la connexion ou celui de la requête ?
Parce que si la requête échoue mais que la connexion s'est bien déroulée, je ne sais pas comment se comporte le client oracle, mais avec celui de sybase par exemple, il retourne bien 0 (ce qui est logique : je me suis bien connecté et j'ai bien exécuté ta requête, même si elle chie)
Vérifie également que sqlplus ramène bien un code retour différent de 0 s'il ne parvient pas à initialiser une connexion.
Autrement : mais pourquoi tu te prends la tête avec le client oracle en ligne de commande au lieu d'utiliser DBI ?
Marsh Posté le 01-12-2006 à 17:15:21
C'est le but.
Et t'as pas besoin d'écrire un parser pour interpréter le résultat de tes select...
Marsh Posté le 01-12-2006 à 17:25:30
ok merci
je vais essayer de trouver de la doc la dessus
je viens de voir sur cpan
t a la doc sur comment te connecter
mais c'est pas tres documenter sur comment faire des requetes
sinon je viens de ressayer le code que j'ai fait plus haut
en cas de reussite j'ai bien un code de retour 0
et en cas d'echec j'ai un code different de 0;
j'ai tester en mettant une table qui n'existe pas,un faux password, une fausse base; un faux user;
et dans tous ces cas j'ai un code different de 0.
Marsh Posté le 04-12-2006 à 09:51:46
bon allez on résume :
- la requête sql, qu'elle plante ou non, retournera 0 à la sortie de sqlplus
- le fait d'appeler des commandes systèmes n'est pas propre, et il convient d'abord d'essayer de les faire avec ton shell avant de l'encapsuler dans du perl, cela t'évitera bien des soucis
- utiliser sqlplus pour faire des requêtes n'est pas judicieux, tu vas devoir parser ton résultat et comme beaucoup le savent, la sortie écran de sqlplus n'est pas géniale
- utilise DBI et DBD Oracle, tu as ce qu'il faut sur http://search.cpan.org/~pythian/DB [...] /Oracle.pm
- pour utiliser DBI et cie, il vaut mieux connaître les bases syntaxiques sous perl (utiliser des tableaux, les boucles, etc.)
- tu as de bons exemples de connexions oracle via perl ici : http://www.orafaq.com/faqperl.htm
Marsh Posté le 04-12-2006 à 10:11:17
Vouloir utiliser sqlplus quand on dispose dans le langage qu'on utilise d'un module d'accès à la base de données, ça mérite le fouet, voire la pendaison par les burnes.
sqlplus, c'est le pire moyen d'accéder à une base pour y faire des requêtes. Notamment parce que sqlplus formate par défaut sa sortie pour l'écran, en faisant tout un tas de craditudes qu'il faut reconfigurer à la main.
Se taper la doc de sqlplus ça sera au moins aussi pénible que d'utiliser DBI, alors oublie sqplus et utilise DBI. Par égard pour les pauvres devs qui se tapent du Korn shell et qui ont pas le choix, eux.
Marsh Posté le 04-12-2006 à 10:25:52
ne lui fait pas peur non plus moi j'aime bien utiliser sqlplus, ca dépanne vachement quand t'as besoin de faire des trucs vite fait genre voir une vue système
Marsh Posté le 04-12-2006 à 10:34:28
sqlplus c'est pratique en ligne de commande, je suis d'accord.
Son utilisation dans le but de faire un programme est nettement plus pénible. Le seul endroit où il est indispensable c'est dans un script shell. Partout où il y a une solution plus évoluée, l'emploi de sqlplus devrait être banni.
cat << SQLREQ |
Marsh Posté le 09-01-2007 à 10:04:18
ok,
je me suis mis au DBI et je viens de faire un test
je me connect à ma base oracle et j'effectue une requete toute simple;
J'ai ce message d'erreur que je ne pije pas ??
Citation : |
Marsh Posté le 09-01-2007 à 10:05:34
voila mon code
Code :
|
Marsh Posté le 09-01-2007 à 10:13:39
dans le message d'erreur c'est quand même explicite
il faut faire un
Code :
|
avant de faire un fetchrow_array
la logique est toute simple :
- se connecter à la base
- préparer sa requête (prepare())
- exécuter sa requête (execute())
- récupérer les résultats (fetch_array())
- terminer les opérations (finish)
Marsh Posté le 09-01-2007 à 10:14:41
ouai je viens de voir et de le modifier à l'instant
desolé du poste , j'etai mal reveillé
Marsh Posté le 01-12-2006 à 14:22:43
salut,
Je souhaiterais utiliser sqlplus dans perl, comment pourrai je faire ?
Je voudrais faire une requete select x from matable,
et recuperer le code retour afin de voir que ma requete c'est bien derouler.
Est ce possible ?
sachant que je ne veux pas utiliser le module DBI
Merci