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

 Oracle Discussion :

Requête select avec variable


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut Requête select avec variable
    Bonjour,

    Je débute en PL/SQL et j'ai accès à une base oracle en lecture seule et je n'ai pas accès au serveur de la base.
    J'essaie de faire une requête simple avec variable du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    declare
    var  integer;
    begin
    :var:=1;
    select champ1 from table where champ2=:var;
    Mais j'ai une erreur m'indiquant que je dois faire un select into.
    Cela implique que je mette le résultat dans des variables et que je récupère ces variables soit avec utl_file ou DBMS_OUTPUT
    Mais n'ayant pas accès au serveur je ne peux pas utiliser utl_file et ne voulant pas me limiter à 32767 octets pour le résultat, je souhaite trouver une autre solution.
    N'est-il pas possible de faire un simple select pour avoir ce résultat.

    Merci d'avance pour vos réponses.

    katwes

  2. #2
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Bonjour,

    Mais j'ai une erreur m'indiquant que je dois faire un select into.
    et en effet :

    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
     
    declare
    var integer;
    var2 table.champ1%TYPE;
    begin
         var:=1;
     
         select champ1 
         INTO  var2
         from table 
         where champ2 = var;
     
         DBMS_OUTPUT.PUT_LINE ( champ1  );
     
    END;
    /

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut
    Merci pour cette réponse,

    Mais je ne souhaite pas afficher mon résultat via dsmb_output ni utl_file.

    Sur sql server
    il est possible de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select champ1 from table where champ2=var
    Cela affiche directement le résultat de la requête.
    Est-ce possible en PL/SQL ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    En SQL directement, pas en PL/SQL.

    Le PL/SQL c'est brutal est lent par rapport au SQL, sans compter que ca ajoute un langage a apprendre avec tout ce que ca implique quand on part de zero.

    Evitez le autant que possible, l'hyper-majorite du temps le SQL fonctionne tres bien.

  5. #5
    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
    De la même façon, mais faites du SQL (langage d'interrogation des bases de données) et pas du PL/SQL (langage de développement procédural exécuté sur le serveur - spécifique à Oracle).

    Dès que vous voyez un BEGIN, vous faites du PL/SQL et plus du SQL.

    Quel est votre client SQL ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut
    J'utilise un requeteur gratuit WinSQL Lite et un driver odbc datadirect 6.1 wire protocol
    En fait je suis confronté à plusieurs problèmes, j'ai simplifié au minimum la requête juste pour illustrer le problème de variable
    mais mes requêtes ont beaucoup plus de champs dont des clobdata, certaines contiennent des curseurs.
    J'ai eu des messages d'erreus m'indiquant que je dépassait la limite des 32767 octets.
    C'est pourquoi j'essaie de ne pas utiliser DBMS_OUTPUT.

  7. #7
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par katwes Voir le message
    J'ai eu des messages d'erreus m'indiquant que je dépassait la limite des 32767 octets.
    C'est pourquoi j'essaie de ne pas utiliser DBMS_OUTPUT.
    pour ton information le buffer de DBMS_OUTPUT varie entre 2000 et 1000000 bytes.

    pour lire plus..



    http://docstore.mik.ua/orelly/oracle/bipack/ch06_01.htm

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut
    Merci pour l'info,

    la limite en question est sur la ligne
    Line length overflow, limit is 32767 bytes per line

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 58
    Par défaut
    Bonjour,

    [...]ne voulant pas me limiter à 32767 octets pour le résultat, je souhaite trouver une autre solution.[...]
    Je pense que katwes ne veut pas utiliser de DBMS_OUTPUT justement.

    Cela étant dit, sans éléments de contexte, difficile de trouver une solution. Quel est le but de l'opération? Effectuer une série de select avec des filtres différents et afficher la sortie? Comment ce script serait-il exécuté? Est-ce une fonction/proc en base? Un script SQL*Plus est-il envisageable?

    Par ailleurs katwes, attention à la différence entre ":var1" et "var1":


    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
     
    SQL> set serveroutput on
    SQL> declare
      2  var1 number := 5;
      3  begin
      4  :var1 := 3;
      5  dbms_output.put_line('var1 = '||var1);
      6  dbms_output.put_line(':var1 = '||:var1);
      7  end;
      8  /
     
    SP2-0552: Variable de lien "VAR1" non déclarée.
     
    SQL> variable var1 number;
    SQL> /
    var1 = 5
    :var1 = 3
     
    Procédure PL/SQL terminée avec succès.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2013, 15h38
  2. [MySQL] Requête SELECT avec un LIMIT à 2 variables
    Par TekFanatiX dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/03/2009, 10h13
  3. Requête UPDATE avec variables...
    Par yokyok dans le forum Outils
    Réponses: 2
    Dernier message: 18/05/2006, 10h37
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 14h28

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