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 :

[PL/SQL] Recuperer le nouveau numero d'une sequence


Sujet :

Oracle

  1. #1
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut [PL/SQL] Recuperer le nouveau numero d'une sequence
    Bonjour,

    je débute en oracle et j'ai une question qui peut vous paraitre simple mais je suis habitué à Access alors, je ne parviens pas à obtenir ce que je souhaite.

    Je dispose d'une table client :

    NumeroClient : Entier
    NomClient : Varchar
    PrenomClient : Varchar
    AdresseClient : VarChar
    FaxClient : Varchar
    TelClient : VarChar

    Sur le numero client, j'ai crée une sequence. Ensuit je dispose d'une fonction qui m'insere le client est et censé me renvoyer le nouveau numero client créé. Et c'est ici que je bloque :

    Ceci fonctionne :

    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
    CREATE OR REPLACE FUNCTION I_client (
    	nom IN varchar2, 
    	prenom IN varchar2, 
    	rs IN varchar2, 
    	ad IN varchar2, 
    	tel IN varchar2, 
    	fax IN varchar2) return NUMBER IS
    NOuveauNum number;
    cpt integer;
    BEGIN 
    SELECT count(*) INTO cpt 
    FROM client 
    WHERE (NomClient = nom) AND (PrenomClient = prenom) and (AdClient=ad);
    IF cpt <> 0 THEN 
    RAISE_APPLICATION_ERROR(-20000,'ce enregistrement exite deja');
    ELSE 
    INSERT INTO Client (NomClient, PrenomClient, RaisonSociale, AdClient, TelClient, FaxClient) 
      VALUES (nom, prenom, rs, ad, tel, fax);
    SELECT NoClient INTO NOuveauNum FROM Client
      WHERE Nomclient=nom and PrenomClient=prenom AND AdClient=ad;
    END IF;
    RETURN (NOuveauNum);
    END;
    Ce que je voudrais savoir c'est comment faire pour recuperer le numero client sans avoir à interoger à nouveau la base avec la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT NoClient INTO NOuveauNum FROM Client
      WHERE Nomclient=nom and PrenomClient=prenom AND AdClient=ad;
    Est ce possible ?

    D'avance

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    A partir d'Oracle 9i vous pouvez utiliser la clause RETURNING INTO.

    mais vous n'avez pas indiqué votre version...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Il me semble que le returning était déjà implémenté en 8i...
    http://download-west.oracle.com/docs...4e.htm#2071462

    Mais sinon, plus sûr que la requête que vous proposez, il y a la pseudo-colonne "currval" de la sequence ... (mais c'est moins propre que le returning)

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Leo. C'est tout simplement ce que j'avais besoin. Le returning est au poil.

    @+

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

Discussions similaires

  1. recuperation du nouveau numero auto
    Par Elwe31 dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2008, 22h52
  2. [VB6] recuperer tous les numero ds une chaine
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/12/2006, 14h37
  3. Réponses: 2
    Dernier message: 23/05/2006, 18h57
  4. [SQL-SERVER] Connaitre le numero de version d'une BD
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/03/2006, 15h03
  5. Recuperation des objet ole dans une base SQL
    Par TOPGUN89 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/11/2005, 09h14

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