IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Stocker des requêtes sur la base de données


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Stocker des requêtes sur la base de données
    Bonjour

    je voudrais savoir si il existe un SGBDR qui implémente un mecanisme permettant d'exploiter
    le fait de mettre du code SQL en base et de pouvoir executer celui-ci sans que la requete en base ne remonte au niveau du client ?

    Exemple:

    Soit une table REGLESALERTES avec quelques champs dont 1 de nom REQUETE de type VARCHAR(255) ou est stocké une requete SQL


    Est-il possible de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Requete FROM REGLESALERTES WHERE (Criteres)
    et d'executer la ou les requetes "resultats" sans que ces requetes remonte au niveau du client pour etre renvoyée au niveau du serveur ?
    (économiser des transferts)

    Se pose le problème, si la requete initiale renvoie plus d'une requetes "résultat" pour ouvrir un nombre plus ou moins important d'objets Dataset

    Merci
    Dernière modification par Antoun ; 05/07/2009 à 23h10.

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Je ne vois pas trop pourquoi tu as peur d'envoyer les requêtes...
    Enfin cela dit, ce que tu demandes est implémenté sous forme de requête dynamiques.
    Cela doit plus ou moins dépendre de ton SGBD...

    Tu es sous quel SGBD ?
    En gros, ça va te donner des transactions (T-SQL, PL/SQL, ...) de ce genre :
    - Tu récupère la requête stockée dans REGLESALERTES dans une variable
    SELECT Requete INTO VarRequet FROM REGLESALERTES WHERE (Criteres);

    - Tu ouvres ton curseur dynamique sur le contenu de la variable

    ... et ensuite en fonction de ton langage de développement, faut arriver à te brancher sur le ref_cursor, lui faire cracher les résultats et les mapper.

    Si tu as plusieurs requêtes qui sont renvoyées, il faut que tu gères la boucle dans ton programme client.
    - Tu ouvres un dataset sur REGLESALERTES ou tu ne renvoies que l'identifiant unique de la table REGLESALERTES
    - Pour chaque résultat, tu demandes l'ouverture du curseur dynamique en passant l'identifiant unique en critère
    - Tu le branche dynamiquement dans ton code sur ton dataset

    Enfin je dis ça...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je vois ...

    mais j'aurais aimer plutôt un mécanisme propre au SGBD

    la requête initiale me renvoie 3 requete X, Y, Z
    rien ne sert a ce que ces requêtes remonte au niveau du client
    il faut quelles soit automatiquement re-executées
    mais pour ça il faudrait une nouvelle instruction SQL, du style :

    EXECUTE QUERY Requete FROM ReglesAlertes

    mais je crois que ce mécanisme n'existe pas

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    Les requêtes ne remontent pas au niveau du client.
    Si un résultat s'affiche sur le poste client, c'est que le programme qui a lancé ces requêtes l'a prévu.

    Si le programme (par exemple en php) et le SGBD sont sur le même serveur, tout se passe sur le serveur sans "remonter" vers le client, jusqu'à ce que le programme prévoie un affichage de résultat sur le poste client.

    Exemple de traitement :

    1) L'utilisateur clique sur un projet pour l'ouvrir.
    2) Le serveur exécute une première requête pour vérifier que l'utilisateur a le droit d'ouvrir le projet. ==> pas de retour vers le client.
    3) Le serveur exécute une requête pour obtenir les paramètres du projet.
    4) Affichage des paramètres du projet sur le poste client.

    Si tu nous en dis un peu plus sur ton besoin, on pourra peut-être t'orienter vers la meilleure solution, ou te rassurer sur le coût ridiculement faible de ces opérations.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce dont je parle si ça existe, fait partie des techniques avancées des moteurs SGBDR.

    l'idée est de mettre le moins possible de code SQL dans l'exécutable
    pour créer un code très généraliste peu dépendant de l'implémentation du MCD.

    L'idée de départ c'est :
    j'ai un logiciel de paye, je veux créer un système d'alerte
    (signaler une fin de contrat approchante, une mutation, etc ...)

    l'autre idée c'est que nous avons un système de d'exportation/importation d'enregistrement de base de données sous forme de fichiers de transport.

    mais je veux que le code de détection des alertes soit en base (SQL) et pas dans l'exécutable (notamment pour le mettre facilement a jour grâce à l'idée d'au-dessus)

    Soit une table REGLESALERTES avec 2 champs
    TYPEALERTE, REQUETESQLALERTE

    et 1 enregistrement dans cette table:

    (pour détecter les fins de contrats qui se termine dans moins de 2 jours)
    TYPEALERTE = 'FinDeContrat'
    REQUETESQLALERTE = 'Select * From Contrats Where Now()-DateFinContrat<2'

    Ce que je veux mettre dans l'exécutable c'est juste ça :

    Execute Query REQUETESQLALERTE From REGLESALERTES Where TYPEALERTE = 'FinDeContrat'

    Et hop le tour est joué...

    1. Le moteur cherche dans la table REGLESALERTES
    2. Il trouve une (ou plusieurs) enregistrements
    3. Au lieu de renvoyer les enregistrements (qui sont des requêtes: POINT TRES IMPORTANT), il les prends pour lui, les réintroduit dans lui-même pour les re-exécuter.
    4. Ces requêtes de niveau 2 peuvent retourner des enregistrements de données
    ou même des enregistrements de requêtes SQL, qui sont a leurs tour reéxecutées...
    5. Comme çà jusqu'à l'infini...

    Je ne sais pas si vous me suivez, mais sans aller jusqu'à un niveau >2

    Aussi faudrait que l'instruction EXECUTE (ou autre) existe !

    mais la c'est une autre histoire...

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ca s'appelle des procédures stockées, c'est ce dont vous parlait pacmann.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    http://sqlpro.developpez.com/cours/sqlaz/techniques/
    Lire les paragraphes 6 puis 3

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Invité
    Invité(e)
    Par défaut
    Merci,

    je vais lire ça !

Discussions similaires

  1. Faire des requêtes sur plusieurs bases de données
    Par nandy.c dans le forum Outils de restitution et d'analyse
    Réponses: 15
    Dernier message: 13/06/2013, 18h25
  2. [PDO] Requêtes sur plusieurs bases de données
    Par nabab dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/08/2007, 08h11
  3. Réponses: 5
    Dernier message: 23/01/2007, 05h24
  4. Requête sur plusieurs bases de données
    Par Oluha dans le forum ASP
    Réponses: 8
    Dernier message: 14/10/2005, 14h57
  5. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo