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 :

Technique remplissage fictif 100% SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Technique remplissage fictif 100% SQL
    Bonjour à tous !

    Je cherche à remplir une table avec des données fictives, pour volontairement la grossir et tester mes projets (entre autre l'actuel projet PHP avec MySQL).

    Je sais qu'il existe plein de solutions, mais je cherche une solution 100% SQL !

    Celle que j'utilise actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test (login, message) select "*login*", floor(1000000*rand()) from test;
    test est une table déjà remplie. Donc au final, j'ai le double des données (avec une moitié fictive).


    Ce que je voudrais, c'est une technique (une astuce), qui permette de définir le nombre de ligne à ajouter en une commande.

    Du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test (login, message) [technique qui crée 50 lignes fictives];
    Est-ce possible ?

    Cordialement
    lnj

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Tu pourrais créer une fonction pour faire ça.
    Tu fait une boucle qui fais les insertions.
    ~ Lola ~

  3. #3
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Salut !
    Merci pour ta réponse rapide

    OK ... mais je cherche plus simple à mettre en œuvre ...

    Les CREATE PROCEDURE (pour le cas de MySQL), c'est trop long à taper !

    En plus cela nécessite deux commandes ...

    N'y aurait-il pas d'autres solutions ?

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par lenainjaune Voir le message
    Bonjour à tous !

    Je cherche à remplir une table avec des données fictives, pour volontairement la grossir et tester mes projets (entre autre l'actuel projet PHP avec MySQL).

    Je sais qu'il existe plein de solutions, mais je cherche une solution 100% SQL !

    Celle que j'utilise actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test (login, message) select "*login*", floor(1000000*rand()) from test;
    test est une table déjà remplie. Donc au final, j'ai le double des données (avec une moitié fictive).


    Ce que je voudrais, c'est une technique (une astuce), qui permette de définir le nombre de ligne à ajouter en une commande.

    Du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test (login, message) [technique qui crée 50 lignes fictives];
    Est-ce possible ?

    Cordialement
    lnj
    Ca dépend dans quel sens !
    En utilisant la clause LIMIT, pas de problème pour limiter
    Par contre il faut que ta table contienne au moins le nombre de lignes que tu veux insérer ...

    Ensuite, tu peux toujours faire un CROSS JOIN sur une table comportant peu de lignes pour multiplier par autant ta volumétrie de ta table (quitte à limiter en plus avec LIMIT).

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Citation Envoyé par lenainjaune Voir le message
    Salut !
    Merci pour ta réponse rapide

    OK ... mais je cherche plus simple à mettre en œuvre ...

    Les CREATE PROCEDURE (pour le cas de MySQL), c'est trop long à taper !

    En plus cela nécessite deux commandes ...

    N'y aurait-il pas d'autres solutions ?
    C'est la meilleure solution à mon sens, ou alors tu créés ta commande insert dans excel en faisant un glisser vers le bas pour incrémenter tes champs uniques.
    Ensuite te suffit de coller tous ces insert générés en 1 minutes dans MySql et d'éxécuter le tout
    Le Porc est un loup pour le Porc.

  6. #6
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Rei Ichido
    Ca dépend dans quel sens !
    En utilisant la clause LIMIT, pas de problème pour limiter
    Par contre il faut que ta table contienne au moins le nombre de lignes que tu veux insérer ...

    Ensuite, tu peux toujours faire un CROSS JOIN sur une table comportant peu de lignes pour multiplier par autant ta volumétrie de ta table (quitte à limiter en plus avec LIMIT).
    Alors ...

    En suivant ton idée de grosse table et LIMIT, sous MySQL, j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select "*test*", floor(1000000*rand()) from information_schema.columns limit 100;
    Mais, bon c'est dédié à MySQL (en plus il n'y a aucune garantie que cette base et cette table existent par la suite).

    Ton idée sur les CROSS JOIN m'a plus inspiré, j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (select 11 union select 12) as t1, (select 21 union select 22) as t2;
    Et ça marche bien, mais c'est plutôt lourd ...

    Petite question, n'y aurait-il pas une syntaxe particulière pour remplacer (select ... union ...), par un ensemble simple de lignes créés à la main ?

    Du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (1,2) as t1, (3,4) as t2;
    Où chaque (1,2,3) serait un ensemble de lignes et non de colonnes (comme une table, quoi).

    Un peu comme dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO test VALUES (1) , (2);
    Citation Envoyé par asmduty
    C'est la meilleure solution à mon sens, ou alors tu créés ta commande insert dans excel en faisant un glisser vers le bas pour incrémenter tes champs uniques.
    Ensuite te suffit de coller tous ces insert générés en 1 minutes dans MySql et d'éxécuter le tout
    Non justement je ne veux pas passer par un import, ou une méga commande insert. Je cherche une solution légère ...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Ok, mais pour moi c'est qui est le plus proche de la réalité, c'est donc ce que je privilégie pour faire ce genre de tests.
    Une fois tout testé on delete * et c'est partit.
    Le Porc est un loup pour le Porc.

  8. #8
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je voulais analyser ce que dit la norme SQL et si éventuellement j'aurais pu trouver mon bonheur, et j'ai été ici, mais bizarrement la documentation à l'air payante !

    Comment ce fait-ce ?

    Est-ce que quelqu'un aurait un lien, pour analyser la norme ?

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Oui, les normes sont généralement payantes. ce sont des documents complexes qui demandent un long travail et de nombreuses réunions d'experts pour décider du contenu.

    Je crois que la norme SQL est très épaisse et pas forcément facile à aborder.

    Il vaut mieux commencer par se référer à des cours, articles, tutoriels, donnés par des experts tels que SQLPro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Fouillez sur Wikipedia, vous trouverez un accès gratuit au dernier draft de la norme SQL:2003.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Sauf que la norme actuelle c'est SQL:2008 !

    En plus MySQL est très très loin de respecter la norme. Il n'est même pas au niveau de SQL:1992 (toujours pas de schéma SQL)

    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/ * * * * *

  12. #12
    Futur Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour les réponses ...

    @CinePhil : je n'ai pas trouvé quelque chose qui réponde à ma question (j'ai peut être mal cherché), en revanche, il y a des tas de choses intéressantes ... merci donc !

    @Waldar : c'est bon j'ai récupéré la draft 2003, je vais regarder à quoi ça ressemble

    @SQLpro : effectivement c'est embêtant que MySQL ne soit pas au même niveau ; ceci étant, je cherchais une solution générique.

    Je voudrais juste souligner que je suis un utilisateur occasionnel du SQL, que j'en pratiqué professionnellement en développement sur des cas relativement simples et que j'ai déjà expérimenté différentes techniques un peu plus avancées (pas en production).

    J'ajouterais, que j'ai une vue relativement "lego" de ce langage. C'est pourquoi, il me semblait logique, qu'il y ait une technique pour "simuler" le remplissage d'une table (du style : select ... from [table_simulée]). Mais apparemment ça n'est pas implémenté !

    Donc merci pour les liens, même si je ne vais pas me servir des techniques avancées maintenant ...

    Pour le moment je dirais que la solution qui me parait la plus simple, reste celle que j'utilise. A savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO test (login, message) SELECT "*login*", floor(1000000*rand()) FROM test;
    Cette solution devrait, en théorie, fonctionner sur n'importe quel SGBDR digne de ce nom, puisqu'elle n'utilise pas de langage dédié aux SGBDR (à confirmer ou infirmer).

    Ça me permet au moins, de doubler le nombre de lignes !

    D'après ce que j'ai lu (cas MySQL), cette possibilité n'a pas toujours été implémentée (lecture / écriture de la même table). Donc elle ne marcherait pas sur d'anciens SGBDR.

    Sinon la solution plus "propre", resterait de créer une procédure stockée ou une fonction qui remplirait la table, comme me l'a suggéré lola06. Mais d'après mes souvenirs, le codage n'est pas standard d'un SGBDR à l'autre (PL/SQL Oracle vs PL/pgSQL PostgreSQL).

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2015, 17h53
  2. Réponses: 8
    Dernier message: 12/08/2014, 18h00
  3. Question technique concernant la connexion à Sql serveur
    Par Stephane_br dans le forum ASP.NET
    Réponses: 6
    Dernier message: 28/04/2014, 12h06
  4. Sage 100 SQL Server : quels droits pour les utilisateurs
    Par fredouille31 dans le forum SAGE
    Réponses: 4
    Dernier message: 03/01/2012, 15h50

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