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 :

Procédure ou fonction pour récupérer une séquence


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut Procédure ou fonction pour récupérer une séquence
    Bonjour,

    Je voudrais récupérer un numéro de séquence et l'insérer dans une table dans un champs de type varchar. Je voudrais savoir quelle serait la plus appropriée parmi les 2 solutions proposées ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION GET_SEQ_GROUP_ENT(SEQ_NAME IN VARCHAR2) AS
    DECLARE
        seq_out NUMBER;
    BEGIN
        EXECUTE IMMEDIATE 'SELECT ' || SEQ_NAME || '.NEXTVAL from dual' INTO seq_out;
        RETURN seq_out;
    END;
    ou

    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
    create or replace procedure next_val (p_sequence_name varchar2)
    as
     
    v_nextval integer;
    v_select varchar2(100);
     
    begin
     
    v_select := 'select '||p_sequence_name||'.nextval from dual';
     
    execute immediate v_select into v_nextval;
     
    dbms_output.put_line('Nextval is: '||TO_CHAR(v_nextval));
     
    end;
    Merci,

  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
    Aucune. La meilleur solution c'est d'utiliser la séquence lors de l'insert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Insert into tab (id, val) values (seq.nextval, 'VALEUR')

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse.

    Je suis d'accord avec votre proposition. Sauf que j'utilise un framework spécifique qui fait appel à des procédures stockées et donc, pour garder une cohérence dans le code, je souhaiterais créer une procédure stockée.

    Merci,

  4. #4
    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
    Faites une fonction qui logiquement réponde à la demande: "donne-moi la prochaine valeur de la séquence".

    Mais j'ai toujours mal à comprendre les approchent totalitaristes des développement surtout quand cela se base sur des mauvaise approches.

    Puis je n'aime pas l'utilisation abusive des requêtes dynamiques. Mais si vous y tenez à les utiliser prenez soin de lire "How to write SQL injection proof PL/SQL" de Bryn LLewellyn pour apprendre à faire ça correctement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2017
    Messages : 176
    Par défaut
    Merci encore pour vos conseils.

    Donc cela devrait suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE FUNCTION GET_SEQ_GROUP_ENT(SEQ_NAME IN VARCHAR2) AS
    DECLARE
        seq_out NUMBER;
    BEGIN
        EXECUTE IMMEDIATE 'SELECT ' || SEQ_NAME || '.NEXTVAL from dual' INTO seq_out;
        RETURN seq_out;
    END;
    Merci,

  6. #6
    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
    Non cette fonction ne passera pas un test de sécurité du code.

Discussions similaires

  1. Fonction pour récupérer une valeur en fonction d'un motif
    Par papis0007 dans le forum Développement
    Réponses: 3
    Dernier message: 26/08/2016, 12h47
  2. [Python 3.X] [openpyxl] fonction pour récupérer toutes les valeurs d'une ligne
    Par Melfos31 dans le forum Général Python
    Réponses: 2
    Dernier message: 16/07/2016, 13h41
  3. [Débutant] Fonction pour récupérer la taille d'une structure
    Par AyouBmx dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/04/2016, 10h32
  4. [XL-2007] manipuler les fonctions caracteres pour récupérer une partie de variable
    Par chrisaccess dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/05/2015, 03h49
  5. Comment appeller une fonction pour récupérer 2 ou + de valeurs
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 28/01/2009, 07h14

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