Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 15/06/2007, 15h05   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 145
Points : 29
Points : 29
Par défaut Recupere identifiant en PLSQL

Bonjour,

J'essaie de realiser un petit script en plsql, mais vue que je debute en plsql c'est pas evident.

Ce que je voudrais faire, c'est recuperer l'identificatio maximum de la table PARAMETRES pour pourvoir ensuite inserer une nouvelle ligne dans la table PARAMETRES.

Voici mon code source :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DECLARE
 
Max_ID NUMBER(10,2);
 
BEGIN 
 
SELECT MAX(*) INTO Max_ID FROM PARAMETRES;
 
INSERT INTO SWC.PARAMETRES
   (ID, LIBELLE)
 VALUES
   (Max_ID, 'Test');
 
END;
Malheureusement ce script ne marche pas, j'ai des erreurs de synthaxe qui m'affichent.

Je vous remercie d'avance, pour vos lumières
wormseric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 15h12   #2
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Votre tentative ne gère malheureusement pas les accès concurrents.
La réponse à votre besoin réside sous Oracle dans les objets suivants : les séquences.
En faisant des recherches sur ce forum ou sur la FAQ, vous trouverez des exemples permettant de les manipuler.
La doc Oracle peut vous en dire plus bien sûr.
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 15h25   #3
Membre habitué
 
Inscription : juin 2003
Messages : 107
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 107
Points : 101
Points : 101
Pour l'erreur de syntaxe, tu dois specifier un champ dans MAX


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DECLARE
 
Max_ID NUMBER(10,2);
 
BEGIN 
 
SELECT MAX(produits.id_prd) INTO Max_ID FROM Produits;
 
 
Max_ID := Max_ID + 1;
 
INSERT INTO produits 
   (id_prd, lib_prd)
 VALUES
   (Max_ID, 'Test');
 
END;
lsaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 15h35   #4
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
Pour vous faciliter un peu le travail et vous éviter de faire des recherches dans ce forum, vous pouvez corriger votre pb de la façon suivant :

1) Récuprérer l'ID max toto id_Max
select max(id_max) from PARAMETRES
1) Créér une séquence initialisée avec le max(id) sur la table PARAMETRES
create sequence APARAMETRES$SEQ
increment by 1
maxvalue 999999999999
minvalue id_Max <== valeur de id_Max
cycle
nocache;

3) dans vos inserts dans cette table faire un nexval sur la séquence
Insert into SWC.PARAMETRES (ID, LIBELLE)
Values (APARAMETRES$SEQ.nextval, 'Test');

LBO 72.
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 15h44   #5
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
En la corrigeant un peu oups

1) Récuprérer l'ID max dans id_Max
select max(id) into (id_max) from PARAMETRES
1) Créér une séquence initialisée avec le max(id) sur la table PARAMETRES
Code :
1
2
3
4
5
6
CREATE sequence APARAMETRES$SEQ
increment BY 1
maxvalue 999999999999
minvalue id_Max <== valeur de id_Max
cycle
nocache;
3) dans vos inserts dans cette table faire un nexval sur la séquence
Code :
1
2
INSERT INTO SWC.PARAMETRES (ID, LIBELLE)
VALUES (APARAMETRES$SEQ.NEXTVAL, 'Test');
LBO72
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 16h15   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et les balises CODE ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 16h25   #7
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
ça sera pris en compte pour mes prochains mails

....sans faute....

LBO72
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 16h52   #8
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 145
Points : 29
Points : 29
J'ai modifié mon script suivant le script de lsaid et ca marche NIKEL.

Merci encore pour toute vos reponse
wormseric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 16h59   #9
Membre confirmé
 
Avatar de LBO72
 
Inscription : mai 2007
Messages : 385
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 385
Points : 282
Points : 282
C'est vrais que ça marche...mais c'est comme le rôle des séquences
Les séquences sont faites pour gérer exactement ce genre de pb.

LBO72
LBO72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 17h08   #10
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Citation:
Envoyé par wormseric
J'ai modifié mon script suivant le script de lsaid et ca marche NIKEL
Votre traitement est une hérésie s'il peut être invoqué par 2 sessions concurrentes.
On vous donne des conseils, libre à vous de faire au plus simple
Ne venez pas vous plaire si vous réinventez la roue et qu'elle tourne carré !
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus 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 12h07.


 
 
 
 
Partenaires

Hébergement Web