Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 11h21   #1
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Par défaut Requête de recherche générale (moteur de recherche) dans une base de données

Bonjour,

Excusez moi de vous déranger, mais est-il possible de créer une requête SQL permettant à partir d'un mot de le rechercher dans toute les tables et colonnes d'une base de données (comme un moteur de recherche), s'il vous plaît ?

Exemple :

Citation:
Mot recherché : TOTO

requête SQL : select * from all table where ? = TOTO ;
En vous remerciant.

Bonne journée.
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 11h32   #2
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
En SQL je ne pense pas!

En revanche il y a ce projet : http://code.google.com/p/anywhereindb/
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 11h58   #3
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Bonjour,

Je vous remercie de m'avoir répondu.

J'ai jeté un coup d'oeil à votre lien http://code.google.com/p/anywhereindb/, cependant c'est pour du code PHP et une base de données MYSQL alors que je travaille en C#, et que ma base de données se situe dans un fichier .xsd.

Pour ce qui est de la base de données je ne peux hélas la fournir, car ce n'est pas un sujet personnel, mais professionnel.

Y aurait-il alors une autre solution, s'il vous plaît ?
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h33   #4
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Oui il y a une solution mais assez longue!

En C:
_ Récupérer l'ensemble des noms de table de votre base
_ Puis, grace à ceci, pour chaque table, récupérer les noms de tous champs
_ Enfin, pour chaque champ de chaque table, rechercher le mot!

Ceci ressemblerai à l'algorithme suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
TABLES <- toutes les TABLES
pour TABLES faire
{
	champs <- touts les champs de la TABLE courante
	requete <- "SELECT * FROM " + TABLE courante + " WHERE";
	pour champs faire
	{
		si ce n est pas le premier passage dans la boucle
		{
			requete <- requete + " AND";
		}
		requete <- champ courant + " = '" + mot + "'"
	}
}
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h02   #5
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Je vous remercie de votre réponse.

Je vais essayer cela au plus tôt.

Je vous dirais si cela aura eu le résultat escompté.

Merci bien.
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h13   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 028
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 028
Points : 18 321
Points : 18 321
Envoyer un message via MSN à CinePhil
Tu peux interroger le catalogue information_schema (vue COLUMNS) pour avoir le nom de toutes les tables et de toutes les colonnes. Ensuite, selon le principe donné par mon prédécesseur, tu crées dynamiquement les requêtes qui utilisent le résultat de l'interrogation du catalogue.

Ceci dit, je ne vois pas l'intérêt de chercher "toto" dans une colonne de type numérique ou date. Alors tu peux aussi récupérer dans le catalogue le type de la colonne (DATA_TYPE) et ajouter un test dans ton programme pour éviter d'interroger inutilement ces colonnes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 14h54   #7
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Merci pour votre remarque j'en prends bonne note.
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h00   #8
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
je t'ai preparé un petit programme en pl/sql sous Oracle qui repond à ton besoin

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
32
33
34
35
36
37
38
39
40
41
42
43
44
CREATE OR REPLACE procedure z_toto IS
  V_Ligne varchar2(400);
  trouve  varchar2(400);
  find    varchar2(100);
  TYPE REFCUR1 IS REF CURSOR;
  cur  REFCUR1;
  cur2 REFCUR1;
 
begin
  Open cur FOR
    SELECT 'select ' || COLUMN_NAME || ' from ' || owner || '.' ||
           TABLE_NAME || ' where upper(' || COLUMN_NAME ||
           ') like upper(''%TO%'')'
      FROM all_tab_columns t
     WHERE data_type LIKE 'VARCHAR%';
 
  Loop
    Fetch cur
      INTO V_Ligne;
    Exit when cur%NOTFOUND;
 
    begin
      Open cur2 FOR V_Ligne;
 
      Loop
        Fetch cur2
          INTO trouve;
        Exit when cur2%NOTFOUND;
        --traitement
        IF trouve IS NOT NULL then
          dbms_output.put_line(trouve);
        end IF;
 
      End loop;
      Close cur2;
    exception
      when others then
        NULL;
    end;
 
  End loop;
  Close cur;
 
end z_toto;
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 25/08/2011, 15h02   #9
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Merci bien.
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 10h02   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Ceci dit, je ne vois pas l'intérêt de chercher "toto" dans une colonne de type numérique ou date. Alors tu peux aussi récupérer dans le catalogue le type de la colonne (DATA_TYPE) et ajouter un test dans ton programme pour éviter d'interroger inutilement ces colonnes.
Je dirais même je ne vois pas l'intêret tout court?

Quelle est votre besoin, je ne vois pas ce qui pourrait vous amener a chercher un mot dans n'importe qu'elle table...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 15h03   #11
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Citation:
Envoyé par iberserk Voir le message
Je dirais même je ne vois pas l'intêret tout court?

Quelle est votre besoin, je ne vois pas ce qui pourrait vous amener a chercher un mot dans n'importe qu'elle table...
Hé bien, l'on m'a demandé de faire un moteur de recherche dans une application.
C'est à dire une fonction "Recherche" qui doit chercher dans toute les rubriques de l'application le mot recherché.
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h54.


 
 
 
 
Partenaires

Hébergement Web