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

PL/SQL Oracle Discussion :

Création de requête avec variable [12c]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 19
    Par défaut Création de requête avec variable
    Bonjour,

    Je suis autodidacte sur la création de requetes SQL, et après avoir essayé pas mal de choses, je bloque sur l'utilisation de variables dans une requete.
    Ci-dessous un exemple de ce que je souhaite faire.
    Environnement : Oracle 12C + sqldevelopper 20.4.1.147


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Declare 
       var1 Number;
       var2 String(20);
    Begin
      for i in 1..147 loop
        var2 := 'FTMP' || to_char(i);
        select object_id into var1 from tn_items where cn_ref_article like var2;
        DBMS_OUTPUT.PUT_LINE (var1);
        DBMS_OUTPUT.PUT_LINE (var2);
      end loop;
    end;
    Cela ne fonctionne pas comme attendu.
    J'ai le message
    Rapport d'erreur -
    ORA-01403: aucune donnée trouvée
    ORA-06512: à ligne 7
    01403. 00000 - "no data found"
    *Cause: No data was found from the objects.
    *Action: There was no data from the objects which may be due to end of fetch.
    Merci pour vos corrections.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Merci d'éditer ton post pour encadrer ton code de la balise CODE (l'icône # dans le menu d'édition)

    Concernant l'erreur NO_DATA_FOUND c'est normal : En plsql un select into qui ne ramène aucune ligne sort en erreur NO_DATA_FOUND (comme le multi ligne sortira en erreur TOO_MANY_ROWS).
    Il faut donc catcher l'erreur et la gérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE v NUMBER;
    BEGIN
    SELECT 1 INTO v FROM DUAL WHERE 1 = 0;
    EXCEPTION WHEN NO_DATA_FOUND THEN 
    DBMS_OUTPUT.PUT_LINE('pas trouvé'); 
    END;

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Si tu utilises l'opérateur LIKE sans métacaractères (% ou _), alors ça revient à faire une égalité, c'est sûrement ça ton problème.

  4. #4
    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
    On peut aussi utiliser une requête scalaire pour ne jamais avoir l'exception NO DATA FOUND :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select coalesce((select object_id from tn_items where cn_ref_article like var2), 0) into var1
      from dual;

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 19
    Par défaut
    Bonjour,

    merci pour vos réponses.

    Pour l'expression like dans le select, j'y avait pensé, mais tout ce que j'ai essayé ne fonctionnait pas.
    Si je mets '&var1' ou '&&var1', j'ai un popup de saisie de la valeur de var1.
    je ne sais effectivement pas comment passer une variable après l'instruction like.
    L'instruction EXCEPTION semble être inconnue.

    Je suis reparti sur la base du code ci-dessous.
    Je n'ai plus d'erreurs, mais pas d'affichage non plus ...
    Juste "Procédure PL/SQL terminée."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Declare 
       var2 String(20);
    Begin
      for i in 1..147 loop
        var2 := 'FTMP' || to_char(i);
        DBMS_OUTPUT.PUT_LINE (var2);
      end loop;
    end;

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Dans ta variable tu peux ajouter le %. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var2 := 'FTMP' || to_char(i) || '%';
    Ta requête fonctionnera alors s'il y a une occurrence trouvée.

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par PNT007 Voir le message
    Je n'ai plus d'erreurs, mais pas d'affichage non plus ...
    Juste "Procédure PL/SQL terminée."
    Avec sqldevelopper, la sortie dbms doit être activée et la sortie se fait dans un autre encart.
    Je ne l'ai plus d'installé sur mon PC (je vais le faire), donc je ne peux pas te donner exactement les clics à faire pour l'instant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une requête avec variable d'une inputbox
    Par Elias Farks dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/02/2008, 17h08
  2. [debutant]Requêtes Avec Variable
    Par theoffss dans le forum VB.NET
    Réponses: 14
    Dernier message: 07/12/2007, 22h04
  3. [SQL & VBA] Requête avec Variable
    Par Altrensa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/07/2007, 14h31
  4. Réponses: 10
    Dernier message: 11/07/2007, 12h06
  5. Requête avec variable incrémentée sur changement de clé.
    Par souellet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 22h47

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