description table avec sqlQuery

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

description table avec sqlQuery

Messagepar herve chapuis » 19 Mai 2023, 12:50

Bonjour

Je désire connaitre le contenu d'une table dans une base données attaquée depuis R avec RODBC.
Je commence par ouvrir un channel en renseignant la table, l'userID et un mot de passe.
Ensuite je tape une requête que je croyais simple :

Code : Tout sélectionner

sqlQuery(channel,errors=T,query='describe sivol.SPECTRE_NIRS')
[1] "42000 900 [Oracle][ODBC][Ora]ORA-00900: invalid SQL statement\n"     
[2] "[RODBC] ERROR: Could not SQLExecDirect 'describe sivol.SPECTRE_NIRS'"


Pourtant dans la doc de sqlQuery(), l'item query est tout simplement "any valid SQL statement". Or il me semble que pour obtenir les détails sur une table il suffit de taper DESC <MA_TABLE>.

Par ailleurs je suis en mesure, sur cette même table, de lancer avec succès une requête plus élaborée.

Code : Tout sélectionner

spectre<-sqlQuery(channel,'select
A.dom_nais||A.annee_nais||A.lot_nais||A.no_nais as id_anim,
       A.LOT_NAIS, A.D_NAIS, S.D_MESURE,S.CD_TISSU,S.stade_Physio,
       S.NO_ECH
from
       sivol.SPECTRE_NIRS S
left join
       sivol.ANIMAL A
ON
        A.DOM_NAIS=S.DOM_nais AND A.ANNEE_NAIS=S.ANNEE_NAIS AND A.LOT_NAIS=S.LOT_NAIS AND A.NO_NAIS = S.NO_NAIS
WHERE 
      A.dom_nais=\'ART\' AND A.ANNEE_NAIS=\'2019\' AND A.LOT_NAIS =\'14\' AND A.lignee =\'MUL17\'
')

J'obtiens la liste des différentes prises de spectres avec la date, le tissu et le numéro de mesure.
Mais je voudrais en plus obtenir les spectres et pour cela il me faut savoir comment ils sont stockés.

Et de préférence sans dépendre de la disponibilité de notre service informatique. :)

D'où ma requête pour décrire la table et connaitre le nom des variables.
J'ai testé en majuscules et en minuscules, en ajoutant des parenthèses après DESC ou DESCRIBE et en ajoutant ';' à la fin. Sans succès.

Merci
Ingénieur de recherche INRAE Toulouse

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

Re: description table avec sqlQuery

Messagepar herve chapuis » 21 Mai 2023, 15:06

En fait j'ai pu résoudre ce problème par un select * qui m'a donné le nom de toutes les variables de la table.
j'obtiens donc un dataframe avec l'identité de l'animal, la date de mesure, le tissu et le numéro de la mesure (elles sont répétées en différents points du tissu).

Maintenant j'ai un souci car les spectres sont stockés sous forme d'un (gros !) vecteur avec la longueur d'onde et l'absorbance, séparés par un point virgule et répétés 2151 fois, de 350nm à 2500nm par pas de 1.

Code : Tout sélectionner

> head(spectre)
        ID_ANIM   D_MESURE NO_ECH CD_TISSU STADE_PHYSIO
1 ART2019144304 2019-07-08      4 FOIE         CHAUD   
2 ART2019144304 2019-07-08      5 FOIE         CHAUD   
3 ART2019144304 2019-07-08      6 FOIE         CHAUD   
4 ART2019144307 2019-07-08      1 FOIE         CHAUD   
5 ART2019144307 2019-07-08      2 FOIE         CHAUD   
6 ART2019144307 2019-07-08      3 FOIE         CHAUD   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              VECTEUR
1 350;0.22639986;351;0.2856407;352;0.33741415;353;0.3374636;354;0.32846828;355;0.35526346;356;0.37969093;357;0.39091032;358;0.44815362;
359;0.40947441;360;0.39055749;361;0.45476543;362;0.43776614;363;0.50919318


J'aimerais donc transformer cette variable VECTEUR.
Une méthode bourrin peut être d'utiliser write.table (avec sep=';') suivi d'un read.table pour passer d'un dataframe à 6 colonnes à un dataframe à 5+2*2151=4307 colonnes. Ca marche mais ce n'est pas élégant.

Quelqu'un voit une solution alternative ?

Merci
Ingénieur de recherche INRAE Toulouse

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Re: description table avec sqlQuery

Messagepar Bastien Gamboa » 23 Mai 2023, 05:20

Bonjour,

Tu pourrais tester l'argument text de la fonction read.table() :

Code : Tout sélectionner

spectre2 <- data.frame(spectre[,colnames(spectre)!="VECTEUR"],
                       read.table(text=spectre$VECTEUR, sep=";"),
                       stringsAsFactors=FALSE

(Code non testé)

HTH,
Bastien

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

Re: description table avec sqlQuery

Messagepar herve chapuis » 23 Mai 2023, 07:01

Merci ! :)
Je ne gagne pas énormément de temps (je n'ai pas mesuré exactement mais ça semble peu différent) mais au moins c'est plus élégant ! :)
Et j'aurai appris un truc.

Belle journée à toi.

Hervé
Ingénieur de recherche INRAE Toulouse


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Gabriel Terraz, Google [Bot] et 1 invité