Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 11h11   #1
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
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 299
Points : 8 650
Points : 8 650
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 :
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 :
Citation:
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 :
DEFINE profil_id INT;
J'ai l'erreur :
Citation:
ORA-00900: instruction SQL non valide
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 11h14   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Pourquoi ne pas faire :

Code :
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.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/09/2011, 12h29   #3
Membre du Club
 
Homme Arnaud
Inscription : octobre 2002
Messages : 56
Détails du profil
Informations personnelles :
Nom : Homme Arnaud
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2002
Messages : 56
Points : 66
Points : 66
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 :
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
__________________
Tuning and optimization are not a fix to a bad design. A good design is a fix to a bad design.
Dajon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 13h14   #4
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
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 299
Points : 8 650
Points : 8 650
@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
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h12.


 
 
 
 
Partenaires

Hébergement Web