Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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/05/2011, 17h03   #1
Futur Membre du Club
 
Inscription : décembre 2010
Messages : 143
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 143
Points : 19
Points : 19
Par défaut Modification d'une séquence

Bonjour,

Je souhaiterais modifier une séquence en utilisant dans la requete une variable. Voici les requetes que j'essaie d'executer :

Code :
1
2
3
4
5
6
 
val1 NUMBER := SELECT max(ID) FROM dom;
val2 NUMBER := SELECT SEQ.NEXTVAL FROM dual;
val3 NUMBER := val2-val1;
 
ALTER sequence SEQ increment BY val3;
La dernière requete ne passe pas. J'ai l'erreur suivante :
Citation:
Erreur commençant à la ligne 5 de la commande :
alter sequence SEQ increment by val3
Rapport d'erreur :
Erreur SQL : ORA-01722: Nombre non valide
01722. 00000 - "invalid number"
Quel est le problème?

Merci d'avance
cecile38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 21h12   #2
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
le problème vient du fait que le alter sequence increment by nécessite un nombre, et n'accepte pas de variable liée.

Pour contourner le problème, créez votre ordre complet dans une chaîne et exécutez-là via un execute immediate.
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql
Administrateur SAP
Mes articles

Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 11h14   #3
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
ou alors si tu ne dois pas looper des milliards de fois

Code :
1
2
3
4
5
6
7
8
9
10
11
SQL> SELECT max(id) FROM dom;
 
   MAX(ID)
----------
       100
 
SQL> SELECT seq.currval FROM dual;
 
   CURRVAL
----------
         6
Code :
1
2
3
4
5
6
7
SQL> declare val1 number;
  2  begin SELECT max(id) INTO val1 FROM dom;
  3  while (seq.nextval<val1) loop NULL; end loop; 
  4  end;
  5  /
 
PL/SQL procedure successfully completed.
Code :
1
2
3
4
5
6
7
8
9
10
11
SQL> SELECT max(id) FROM dom;
 
   MAX(ID)
----------
       100
 
SQL> SELECT seq.NEXTVAL FROM dual;
 
   NEXTVAL
----------
       101
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h47.


 
 
 
 
Partenaires

Hébergement Web