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

SQL Firebird Discussion :

[FB][PS] Tableau d'entier comme paramètre ds 1 Proc Stocké ?


Sujet :

SQL Firebird

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut [FB][PS] Tableau d'entier comme paramètre ds 1 Proc Stocké ?
    Bonjour,
    SGBD : FireBird 1.5
    Comment passer un tableau d'entier comme parmètre dans une procédure stocké (et que retourne un tableau de chaine de caractère)?
    :
    c'est à peu près comme celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE PROCEDURE PS (
       !!!??? tab_ent INT [] )
    RETURNS (
        !! ?? tab_str string[])
    AS
    begin
     
      /* Procedure Text */
     
      suspend;
    end

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Y a personne qui peut répondre?
    Ca m'interresse aussi!

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Un tableau ce n'est pas ce qu'il y a de plus facile a manipuler en SQL.

    De plus vous ne pourrez faire des tableau dynamique (taille variable) ce qui limite pas mal leur interret du coup...

    Et finalement ces déclarations :

    sont utilisables pour la déclaration de colonne de tables mais pas dans les PS.

    Comment lire un tableau dans un PS allez vous me dire...

    Et bien en décomposant le tableau élément par élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      FOR SELECT TAB_INT[1], TAB_INT[2], TAB_INT[3], ...
          FROM TAB_ENTIER
          INTO :INT1, :INT2, :INT3,...
      DO
      BEGIN
        SUSPEND;
      END
    Ceci dit je vous déconseille d'utiliser les tableau dans les tables, car il vous sera difficile de les mannipuler, si vous changez de SGBD il y a de forte chance que ceux ci se soient pas supportés. Enfin ces tableau sont très facilement remplacable par une table liée par une FK. Ce qui en plus occupera certainement moins de place a moins que tous les emplacements de votre tableau ne soit systèmatiquement remplie (dans ce cas créez autant de colonne dans votre table).

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse!

    J'espérais qu'il y avait un moyen de déclarer des variables de type tableau de qqch...
    Apparemment, ce n'est pas possible, on est quasiment obligé de passer par une table, dommage...


  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    au sujet des tableaux, j'ai eu le même genre de question et j'ai contourné la chose en déclarant un type varchar(32760) que je remplis avec les données, et à l'autre bout, dans l'application, je reconstruis le tableau (c'est donc une sérialisation des données)

    le gain de temps dans mon cas fut fabuleux! un traitement de plus de 2 heures et passé à quelques minutes! (à cause de sous-requêtes qui sont passées dans la procédure)

    mais il faut dire que la tâche demandée était (est) assez tordue...

    donc, cela vaut la peine de consacrer un peu de temps à la question, mais avant de ce lancer, il faut absolument étudier la question et voir si il n'existe pas d'autres solutions!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut A quoi sert ?
    Merci pour tous,

    Mais !!

    Dans une PS, on ne peut declarer les tableaus ni comme paramètre d'entrée, ni comme paramètre de sortie!!!??

    Juste manipulation à l'interieur PS! elle devient initule donc!

    Mais pourquoi ? :

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    les procédures stockées ne sont pas inutiles (si je comprend la question/affirmation) elles permettent de résoudre bien des problèmes de manières élégantes et très performantes, même si tout n'est pas parfait en matière de paramètre ou de tableau.

    cela dit utiliser un type char ou varchar pour transmettre des tableaux fonctionne parfaitement, pour info, j'ai développée une udf qui parse les chaînes et retourne les mots dans une structure de type tableau et j'utilise le type char() pour balader les tableaux et cela fonctionne parfaitement.

    il y a certainement une solution alternative à ton problème, par exemple, si tu n'a que des valeurs entières, il serait facile de construire une udf qui recoit une valeur entière et retourne la valeur en binaire qui peut-être contenu dans un char(4) (ou en code "AA" et dans ce cas, la chaîne fait 8 caractères) et donc plusieurs valeurs dans un multiple de 4 (ou de 8 en code "AA") qu'en pense-tu?

    une autre approche c'est d'utiliser la fonction chr() de rfunc et de décomposer les valeurs en caractères pour les transmettres ensuite dans une chaîne.

    tu vois, il existe des solutions.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/05/2013, 16h25
  2. Réponses: 1
    Dernier message: 01/08/2009, 10h54
  3. passer un entier comme paramètre
    Par damaskinos dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/07/2007, 17h09
  4. Réponses: 2
    Dernier message: 03/12/2006, 12h37
  5. Un fichier .bmp comme paramètre d'une Procédure stockée
    Par FONKOU dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/10/2004, 17h56

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