Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1595 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  probleme avec sqlplus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme avec sqlplus

n°1484937
donny3
Posté le 01-12-2006 à 14:22:43  profilanswer
 

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

mood
Publicité
Posté le 01-12-2006 à 14:22:43  profilanswer
 

n°1484938
Elmoricq
Modérateur
Posté le 01-12-2006 à 14:24:51  profilanswer
 

Et pourquoi ne veux-tu pas utiliser le module DBI ? :??:

n°1484939
Taz
bisounours-codeur
Posté le 01-12-2006 à 14:24:51  profilanswer
 

beurk
 
`sqlplus`

n°1484959
donny3
Posté le 01-12-2006 à 14:38:26  profilanswer
 

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 :
  1. system(" sqlplus -s user/pass\@mabase select dummy from dual;" );


 
quandd j'appel mon script j'ai ça en sortie

Citation :


SQL*Plus: Release 10.2.0.2.0 - Production
 
Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
 
Usage 1: sqlplus -H | -V
 
    -H             Displays the SQL*Plus version and the
                   usage help.
    -V             Displays the SQL*Plus version.
 
Usage 2: sqlplus [ [<option>] [<logon>] [<start>] ]
 
  <option> is: [-C <version>] [-L] [-M "<options>"] [-R <level>] [-S]
 
    -C <version>   Sets the compatibility of affected commands to the
                   version specified by <version>.  The version has
                   the form "x.y[.z]".  For example, -C 10.2.0
    -L             Attempts to log on just once, instead of
                   reprompting on error.
    -M "<options>" Sets automatic HTML markup of output.  The options
                   have the form:
                   HTML [ON|OFF] [HEAD text] [BODY text] [TABLE text]
                   [ENTMAP {ON|OFF}] [SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
    -R <level>     Sets restricted mode to disable SQL*Plus commands
                   that interact with the file system.  The level can
                   be 1, 2 or 3.  The most restrictive is -R 3 which
                   disables all user commands interacting with the
                   file system.
    -S             Sets silent mode which suppresses the display of
                   the SQL*Plus banner, prompts, and echoing of
....


 
??

n°1484962
skeye
Posté le 01-12-2006 à 14:40:16  profilanswer
 

[:moule_bite]


---------------
Can't buy what I want because it's free -
n°1485062
couak
Posté le 01-12-2006 à 16:22:16  profilanswer
 

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

n°1485088
donny3
Posté le 01-12-2006 à 16:37:25  profilanswer
 

en faite j'ai fait cela

Code :
  1. $result = system ('echo  "select * from dual;" | sqlplus -s /nolog >> /dev/null user/pass@mabase') ;
  2. if ($result == 0)
  3. {
  4. print "La connexion fonctionne\n";
  5. }
  6. else
  7. {
  8. print "La  connexion ne fonctionne pas\n";
  9. }


 
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 :
  1. system ("sqlplus username/password@instance <<-!EOSQL
  2.          WHENEVER SQLERROR  exit 5
  3.          select dummy from dual;
  4.          exit 0
  5. !EOSQL
  6. ';" );


 
mais le probleme est que system ne prend en compte que ce qu'il y a sur la premiere ligne et pas les autres

n°1485123
Elmoricq
Modérateur
Posté le 01-12-2006 à 16:55:00  profilanswer
 

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 ? [:mlc]


Message édité par Elmoricq le 01-12-2006 à 16:57:57
n°1485137
donny3
Posté le 01-12-2006 à 17:13:46  profilanswer
 

avec DBI je peux effecuter des requete aussi ?

n°1485140
Elmoricq
Modérateur
Posté le 01-12-2006 à 17:15:21  profilanswer
 

C'est le but. [:el g]
 
Et t'as pas besoin d'écrire un parser pour interpréter le résultat de tes select...

mood
Publicité
Posté le 01-12-2006 à 17:15:21  profilanswer
 

n°1485145
donny3
Posté le 01-12-2006 à 17:25:30  profilanswer
 

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.

n°1485868
couak
Posté le 04-12-2006 à 09:51:46  profilanswer
 

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

n°1485877
Chaos Inte​stinal
Posté le 04-12-2006 à 10:11:17  profilanswer
 

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.

n°1485893
couak
Posté le 04-12-2006 à 10:25:52  profilanswer
 

ne lui fait pas peur non plus :o 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

n°1485899
Chaos Inte​stinal
Posté le 04-12-2006 à 10:34:28  profilanswer
 

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
SET TAB OFF
SET LINESIZE 200
SET FEEDBACK OFF
SET PAGESIZE 0
SET HEADING OFF
WHENEVER SQLERROR EXIT SQL.SQLCODE
SELECT LINE FROM DIV.DIV_BIP_EXPORT_LINES ORDER BY CODE, TYPE, ETS
SQLREQ | sqlplus -s / AS SYSDBA


 
[:moule_bite]

n°1500659
donny3
Posté le 09-01-2007 à 10:04:18  profilanswer
 

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 :


DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) [for statement ``select * from dual'' with params: ]) at /home/blionnel/bin/test.pl line 18.
 


n°1500660
donny3
Posté le 09-01-2007 à 10:05:34  profilanswer
 

voila mon code

Code :
  1. use strict;
  2. use DBI;
  3. my $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) ;
  4. my $requete ="select * from dual";
  5. my $sth=$dbh->prepare($requete);
  6. while (my @enr = $sth -> fetchrow_array) {
  7. print "@enr\n";
  8. }
  9. $sth->execute();
  10. $sth -> finish;
  11. $dbh -> disconnect;

n°1500667
couak
Posté le 09-01-2007 à 10:13:39  profilanswer
 

dans le message d'erreur c'est quand même explicite :o
il faut faire un

Code :
  1. $sth->execute()

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)

n°1500669
donny3
Posté le 09-01-2007 à 10:14:41  profilanswer
 

ouai je viens de voir et de le modifier à l'instant
desolé du poste , j'etai mal reveillé


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  probleme avec sqlplus

 

Sujets relatifs
Probleme d'affichageProblème de focus sur element <embed/>
Probleme de disposition de boutons et d'encadré[MySQL] Problème avec requête et condition IN
problème de 'quote' dan sune syntaxe XMLProblème de connexion a une base de donnée VBA Access
Probleme de Pop Up sous Internet ExplorerProblème de fond de cellule dans une newsletter
sqlplus : problème union 1 to many avec datesProblème pour voir mes tables oracles avec sqlplus
Plus de sujets relatifs à : probleme avec sqlplus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR