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

SQL Oracle Discussion :

Sequence et Insert : Variables


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut Sequence et Insert : Variables
    Bonjour,

    J'ai trouvé plusieurs sujets abordant le problème mais à chaque fois mes tests ne sont pas concluants.

    Pour information, je n'ai pas accès à RETURNING INTO (histoire de version) et je ne souhaite pas ajouter un trigger à la table existante, je n'utilise pas SQL*Plus. C'est un fichier SQL destiné à être exécuté chez les clients (et ici en dev d'abord).

    En gros, j'ajoute un profil dans une table PROFIL qui a en guise de colonne, un identifiant auto-incrémenté par une séquence SEQ_PROFIL et un libellé.

    Derrière, je veux ajouter des droits avec ce profil, mais il faut que je récupère l'identifiant inséré.

    Commençons par faire simple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SEQ_PROFIL.nextval INTO :profil_id FROM DUAL;
    INSERT INTO PROFIL (id, label) VALUES (:profil_id, 'Nouveau profil');

    Quand j'exécute la commande 1, pas d'erreur.
    Quand j'exécute les commandes 1 et 2, erreur :
    ORA-01008: toutes les variables ne sont pas liées
    J'ai loupé quelque chose ? Comment faut-il que je déclare la variable ?

    NB : Quand j'essaye de faire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DEFINE profil_id INT;
    J'ai l'erreur :
    ORA-00900: instruction SQL non valide

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO PROFIL (id, label) VALUES (SEQ_PROFIL.NEXTVAL, 'Nouveau profil');
    Sinon, je te conseille vivement de mettre l'affectation du numéro de séquence dans un trigger BEFORE INSERT qui met le nextval si new.id is null.

  3. #3
    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,

    Je dis peut-être une bêtise, mais si le problème est de récupérer la valeur de l'identifiant qui vient d'être inséré, et donc la valeur courante de la séquence, pourquoi ne pas utiliser

    pour récupérer cette valeur?

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO PROFIL (id, label) VALUES (SEQ_PROFIL.NEXTVAL, 'Nouveau profil');
    INSERT INTO DROITS (id, profil_id, label) values (SEQ_DROIT.NEXTVAL, SEQ_PROFIL.CURRVAL, 'Un droit');
    Enfin si j'ai bien compris ce que vous voulez faire

  4. #4
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    @StringBuilder > Dajon t'a donné la réponse

    @Dajon > Ben je connaissais pas CURRVAL, je ne fais des scripts SQL qu'exceptionnellement.

    Merci beaucoup de ton aide, c'est tout à fait ce qu'il me fallait

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

Discussions similaires

  1. [MySQL] Insertion variable MySQL
    Par Little_flower dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/10/2007, 12h56
  2. Insertion variable dans champ mémo
    Par tg_worldwide dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/07/2007, 15h15
  3. Insertion variable JS dans code HTML
    Par Ekik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/03/2007, 16h05
  4. [ARRAY]insertion variable dans base de donnée
    Par lazzeroni dans le forum JDBC
    Réponses: 2
    Dernier message: 30/03/2006, 10h33
  5. [SGBD] [Problème insertion variable php/mysql]
    Par vincedjs dans le forum Installation
    Réponses: 20
    Dernier message: 08/02/2006, 16h41

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