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 :

Validation paramètres PL/SQL : Comment ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut Validation paramètres PL/SQL : Comment ?
    Bonsoir,

    J'ai une petite question sur la meilleure façon de valider des paramètres d'une procédure en PL SQL.

    j'ai une fonction qui reçoit un paramètre dont voici un exemple de signature:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    function augmenterTaille(inCode IN VARCHAR2) RETURN NUMBER
    J'aimerai dans le body de ma fonction tester que le paramètre inCode est bien dans une table de dictionnaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    function augmenterTaille(inCode IN VARCHAR2) RETURN NUMBER 
    IS 
    BEGIN
      BEGIN
       trouver le inCode dans le dictionnaire des taille  
      EXCEPTION 
         when NO_DATA_FOUND 
             raise_application_error(-20001, 'Le code ' || inCode || 'n''existe pas';
      END;
      suite de la function.
    END augmenterTaille;
    Le problème c'est que j'ai énormément de fonction dans le genre et j'aimerais avoir un truc un peu plus générique.
    Est-ce que quelqu'un pourrait m'expliquer comment je peux faire pour valider de manière simple et pratique des paramètres de procédure/function en plsql?
    merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Si c'est plus facile, comment je peux faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IF inVALUE NOT IN (SELECT A.CODE FROM DICTIONNAIRE ) THEN
       raise_application_error(...);
    END IF;
    Merci par avance

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut
    bonsoir,

    Je ne comprends pas bien ton probleme.
    pourquoi ne pas faire une fonction qui s'occupe de cette tache alors?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function isValid(p1 in varchar2) return boolean is
    begin
       recherche code;
       return true;
    exception when no_data_found then
      return false ; -- ou raise
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if isValid(incode) then
       --traitement
    else
      raise_application_error;
    end if;
    Remarque: si ton dictionnaire contient peu de valeurs, tu peux travailler avec une collection, chargee une fois, pour economiser la requete SQL.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    Merci pour ta réponse. Je l'ai fais maintenant avec une fonction qui retourne un boolean, mais je pensais que c'etait possible sans devoir parcourir moi même le CURSOR.

    Un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF 'XX' NOT IN (SELECT FOO FROM BAR);
    Sinon, dans les collection d'ORACLE, est-ce qu'il existe un truc comme le Map<K,V> de java (TreeMap, HashMap...)?

    Merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut
    bonsoir,
    les collections Oracle sont moins raffinées que celle de java encore que...
    http://sheikyerbouti.developpez.com/pl_sql/

    tu peux faire un tableau de record(K,V) pour simuler une hashmap. Mais selon ta key, il faudra surement faire une boucle pour retrouver le bon record.

    Cdt

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut
    une pseudo simulation d'une hashmap:

    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
    declare
    HMvalue  varchar2(200);
    HMkey  varchar2(10);
    type hashmap is table of varchar2(200) index by varchar2(10);
     
    mamap hashmap;
     
    begin
        HMkey:='key1';
        HMvalue:='value1';
        mamap(HMkey):=HMvalue;
        HMkey:='key2';
        HMvalue:='value2';
        mamap(HMkey):=HMvalue;
     
     
        dbms_output.put_line(mamap('key1'));
        dbms_output.put_line(mamap('key2'));
    end;

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Par défaut
    C'est parfait!!
    Je connaissais pas!
    Très grand merci à toi et excellente soirée!

Discussions similaires

  1. Requete SQL : comment faire un cumul
    Par yannick069 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2015, 13h21
  2. Réponses: 9
    Dernier message: 27/07/2010, 14h30
  3. [script SQL]comment passer des parametres a un scrip sql?
    Par la7su dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/03/2005, 10h55
  4. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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