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 Oracle Discussion :

Limite de paramètre dans un IN


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut Limite de paramètre dans un IN
    Bonjour,

    Savez vous s'il est possible d'augmenter le nombre maximum de paramètres dans un IN.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from monTab where monTab.id IN (1,2,...,1000)
    Actuellement je suis limité à 1000 valeurs.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Utilisez une collection ou une table temporaire.

    [Edit]
    Voilà un lien qui contient un exemple.
    [/Edit]

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Connected TO Oracle9i Enterprise Edition Release 9.2.0.7.0 
    Connected AS mni
     
    SQL> CREATE OR REPLACE type vStr AS varray(2000) of varchar2(10)
      2  /
     
    Type created
     
    SQL> 
    SQL> SELECT e.*
      2    FROM emp e,
      3         TABLE(vStr('7900','7369','7499')) a
      4   WHERE To_Number(a.column_value) = e.empno
      5  /
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7900 JAMES      CLERK      7698 03/12/1981     950,00               30
     7369 SMITH      CLERK      7902 17/12/1980     800,00               20
     7499 ALLEN      SALESMAN   7698 20/02/1981    1600,00    300,00     30
     
    SQL>
    J'ai essayé cette solution avec le code suivant:
    CREATE OR REPLACE type vStr AS varray(1000000) of varchar2(10)

    avec 2000 paramètres j'ai un retour erreur:
    Query OK, 0 rows affected (16 ms)
    ORA-00939: too many arguments for function

    Je vais creuser les collections. Merci pour les pistes.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu ne peux pas avoir un varray ou une collection définie avec 2000 arguments dans le constructeur.

    Quel est ton client? sqlplus?

    En dernier recours je tenterais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM monTab 
    WHERE monTab.id=1 
    or monTab.id=2
    ...
    or monTab.id=2000;
    Mais ce ne serait pas mieux d'avoir une table temporaire?

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    tu ne peux pas avoir un varray ou une collection définie avec 2000 arguments dans le constructeur.
    ...
    Laurent,
    Peut être je t’ai mal compris mais, on n’a pas besoin de passer les 2000 valeurs dans le constructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    C:\Documents and Settings\mnitu>sqlplus mni/Mni
     
    SQL*Plus: Release 10.2.0.1.0 - Production on Jeu. Sept. 24 11:54:30 2009
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     
    ConnectÚ Ó :
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
     
    SQL> set serveroutput on
    SQL> CREATE OR REPLACE type vStr AS varray(10000) of varchar2(10)
      2  /
     
    Type crÚÚ.
     
    SQL>
    SQL> declare
      2    l_vstr vstr:= vstr();
      3  Begin
      4    -- initialisation
      5    For i in 1..10000 Loop
      6      l_vstr.extend;
      7      l_vstr(i) := to_char(i);
      8    end loop;
      9    --
     10    For c_emp In (SELECT e.*
     11                    FROM emp e,
     12                         TABLE(l_vStr) a
     13                   WHERE To_Number(a.column_value) = e.empno
     14                  )
     15    Loop
     16      dbms_output.put_line(c_emp.ename);
     17    End Loop;
     18  End;
     19  /
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
    JAMES
    FORD
    MILLER
     
    ProcÚdure PL/SQL terminÚe avec succÞs.

  6. #6
    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 !

    J'ai une solution qui sent mauvais :
    Tu mets tous tes éléments dans une seule chaine de caractères séparés par un truc fixe, et tu les parses à la volée avec CONNECT BY LEVEL, SUBSTR et INSTR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SUBSTR('/1000/2000/1/300/15/39/', INSTR('/1000/2000/1/300/15/39/', '/', 1, level) + 1, INSTR('/1000/2000/1/300/15/39/', '/', 1, level + 1) - INSTR('/1000/2000/1/300/15/39/', '/', 1, level) + 1 - 2)
    FROM DUAL
    CONNECT BY LEVEL <= 5
    RES
    -----------------------
    1000
    2000
    1
    300
    15

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Laurent,
    Peut être je t’ai mal compris mais, on n’a pas besoin de passer les 2000 valeurs dans le constructeur.
    bon, et tu fais comment ça sans PL/SQL

Discussions similaires

  1. Ajout de paramètres dans le path du forward
    Par sylvain_neus dans le forum Struts 1
    Réponses: 6
    Dernier message: 14/11/2007, 17h31
  2. [jsp][struts] paramètre dans un iframe.
    Par ultimax dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 12/10/2004, 09h25
  3. Mettre la valeur d'un paramètre dans un champs
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/10/2004, 16h08
  4. [CR] insérer une image paramétrer dans une étiquette
    Par yoyothebest dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 22/08/2004, 11h58
  5. limiter la saisie dans un edit à des réels!!!
    Par shout dans le forum Windows
    Réponses: 10
    Dernier message: 21/06/2004, 16h20

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