Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
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/08/2007, 04h47   #1
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
Par défaut alter sequence increment by (select..) nombre non valid!?

salut ,

voila j'ai créé une séquence démarrant avec 1 tout ce qui ya de plus basique.
mais , comme je voudrais que la séquence se réinitialise (genre reset séquence)
j'ai sus qu'il fallait utiliser la clause InCrement by -(la valeur courante) pour avoir le nextval a 1(puis remettre increment by 1).
mais , quand c'est pour réinitialiser suite a un contrôle .
je doit rendre le dynamique.

genre même si je ne connais pas la valeur courante .
et après quelque essais , je patine au niveau syntaxe j'arrive pas a valider la valeur courante en tant que nombre d'incrementation.

exemple (grossier):
Code :
ALTER seqeunce seqtest increment BY -(SELECT seqtest.currval FROM dual)
alors pourriez vous m'orienter justement sur une façon qui me permettrait de faire ça ENCORE MERCI
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2007, 15h07   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
pourquoi ne pas simplement effacer et recréer la séquence?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2007, 15h43   #3
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
Par défaut euh..

ben,
ce code doit etre implementé sur forms ?a vrais dire.

il participe a un code articulé ("mmyy"-seqtest).

donc dans mon apli je doit verifier tout le temp quel moi en est et au changement du moi la sequence se reinitialise .

mais si , je doit recreer la sequence chaque mois , je devrais le faire depuis sqplus alors , pas depuis forms remarque !

est ce que recreer ca ne consome pas plus de temp que de reinitialiser ?
merci de m'eclairer
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2007, 16h27   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
je ne vois pas l'avantage de faire alter plutôt que drop/create...

Forms permets le "alter" et pas le "create"? bizarre...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 11h55   #5
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
Par défaut hihi

ben ,
non j'ai pas dit ça (du tout) .forms permet peut être de faire des ddl avec la clause form_ddl(..);
mais , selon toi (vous) , recréer vaut autant que l'alter ,ou?.
je voulais juste savoir, si ça ne coûtais pas plus de temps l'exécution(que d'alterer).

ROGGER
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 12h14   #6
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
La différence doit être minime. Cela ne doit donc pas être un critère.
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 12h39   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
perso je trouve le drop/create plus simple, à toi de voir
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 23h26   #8
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
donc ,
elle sera drop créer chaque mois !
entre autre , pourriez vous m'orienter syntaxiquement.
je vais donc comparer (a l'aid d'un triger)sous forms chaque ouverture .
le mois actuel et celui du code articulé .
en gros :
Citation:
if (to_char(sysdate,'mm')<>T) --T est un parametre ou est stocké la précédente valeur (a l'ouverture) de sysdate
then ""clause ddl ('drop sequence seq_test ; create sequence seqtest;')
else T:=to_char(sysdate,'mm')
Au faite create or replace est il faisable sur les séquences!?

En prime , je voudrais savoir quand on a une séquence sur une colonne !
si ça serait possible de mettre un trigger de base de donnée

INSTEAD OF INSERT pour faire qu'a chaque insertion l'identifiant s'insère depuis la séquence !
si c'est pas le cas conseilliez moi!
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 09h50   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
je ne connais pas la syntaxe forms, mais dans plsql, tu fais qqchose comme
Code :
execute immediate 'drop sequence s'; execute immediate 'create sequence s';

quant au trigger, c'est possible, mais ce n'est pas un INSTEAD OF trigger. Les instead of, c'est sur des vues.

http://oracle.developpez.com/faq/?pa...#autoincrement
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 09h59   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
si tu as une version récente tu peux aussi faire

Code :
1
2
3
4
BEGIN
   :NEW.macolonne_PK := MaSequence.NEXTVAL
END;
/
à l'avenir, merci de préciser ta version
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h05   #11
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
plutôt :

Code :
1
2
3
4
5
BEGIN
   SELECT MaSequence.NEXTVAL INTO :NEW.macolonne_PK  
     FROM DUAL;
END;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h43   #12
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
une version récente = 11g

http://download.oracle.com/docs/cd/B...c.htm#BABDDFGI

Code :
1
2
 
  seq_value := employees_seq.NEXTVAL;
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 12h08   #13
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
j'aurais dû deviner
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 16h29   #14
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
Par défaut euh ..?

Premièrement,
je tient a m'excuser pour la version (c'est vrai ).
c'est la version 9.2 i (et 10g pour le developper).
donc pas une version récente (10g )
si je comprend bien pour la premiere question : je fait

la commande exécute imediate dans ma clause ddl "
Code :
execute immediate 'drop sequence s'; execute immediate 'create sequence s';"
je vais aussi donner ce privilège (execute)!

et pour la séquence simple :je fait comme fred:
Citation:
CREATE SEQUENCE MaSequence
CREATE TRIGGER MonTrigger
BEFORE INSERT
ON MaTable
FOR EACH ROW
BEGIN
SELECT MaSequence.NEXTVAL
INTO :NEW.macolonne_PK
FROM DUAL;
END;
/
au faite la 2eme question c'est pour une séquence qui se réinitialise pas .
si cetait le cas au moment du "drop seqtest" , le trigger ne péterait pas par hasard !
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 16h35   #15
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
non, soit tu recrées soit tu incrémentes de nextval après avoir changer le pas d'incrément comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE PROCEDURE reinit_Masequence
ln$nextval number;
BEGIN
SELECT MaSequence.NEXTVAL
INTO ln$nextval 
FROM DUAL;
 
execute immediate 'alter sequence Masequence increment by -' || ln$nextval ;
 
SELECT MaSequence.NEXTVAL
INTO ln$nextval 
FROM DUAL;
 
execute immediate 'alter sequence Masequence increment by 1'
 
END;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 16h39   #16
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
c'est une bonne remarque, mais il pêterait aussi avec alter (en tout cas dans vos versions préhistoriques...)

en fait, il est invalidé, mais au prochaine insert il sera recompilé.

pour que ça soit plus propre, tu peux ajouter après drop sequence / create sequence
Code :
1
2
 
ALTER TRIGGER tontrigger COMPILE;
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 16h41   #17
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
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 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
SQL> CREATE TABLE t (x number,y number);
 
TABLE created.
 
SQL> CREATE sequence s;
 
Sequence created.
 
SQL> CREATE OR REPLACE TRIGGER tr before INSERT ON t FOR each row
  2  begin SELECT s.NEXTVAL INTO :new.x FROM dual; end;
  3  /
 
TRIGGER created.
 
SQL> INSERT INTO t(y) VALUES (1);
 
1 row created.
 
SQL> SELECT * FROM t;
 
         X          Y
---------- ----------
         1          1
 
SQL> DROP sequence s;
 
Sequence dropped.
 
SQL> CREATE sequence s;
 
Sequence created.
 
SQL> SELECT STATUS FROM user_objects WHERE object_name='TR';
 
STATUS
-------
INVALID
 
SQL> INSERT INTO t(y) VALUES (2);
 
1 row created.
 
SQL> SELECT * FROM t;
 
         X          Y
---------- ----------
         1          1
         1          2
 
SQL> SELECT STATUS FROM user_objects WHERE object_name='TR';
 
STATUS
-------
VALID
 
SQL> commit;
 
Commit complete.
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 17h48   #18
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
donc ,
j'ai l'embarras du choix , et franchement vous êtes top gentils (merci pour le code , qui plus est a été exécute).
J'utilise seulement l'un des codes sis dessus(soit drop soit alter).



Citation:
PS:j'ai mon script de création de base de donnés(ma base)!
Et comme je suis presque seul a continuer mon projet(ni prof ni binôme ) .


serait ce possible de le joindre dans ce topic ,ou un autre :

pour me conseiller sur les type ou format de données des identifiant
(a qui mettre une séquence ?etc..)
(doc et conception dispo bien sure !au cas ou!) "codification".

parce que pour l'instant j'ai mis des (number,varchar) un peut partout
Fichiers attachés
Type de fichier : rar ma base+detail.rar (9,3 Ko, 0 affichages)
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 11h43   #19
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
Par défaut :)?

bonjour ,
merci pour vos code ca marche impec , j'ai finalement choisit l'alter au lieu du drop (a tester sur forms) qui marche sur sqlplus*.
mais , comme mon apetit grandit :

j'ai donc une question:
supposons que j'ai des client de concessionnaire repartie sur 3service(vente,pièce détache , SAV).

serait il possible (j'ai essayé en vain).de mettre un trigger
BEFOR INSERT qui rajoutera un caractère
Citation:
if la colonne service =vente then
insert into :new.num_cli 'V'||seq_cli.nextval from dual
if la colonne =piece then insert into ..'P'||seq_cli.nextval
etc...
A Vous les gars !
Merci molto molto
scofield est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 16h00   #20
Membre régulier
 
Avatar de scofield
 
Homme koss
Administrateur de base de données
Inscription : octobre 2006
Messages : 179
Détails du profil
Informations personnelles :
Nom : Homme koss

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : octobre 2006
Messages : 179
Points : 78
Points : 78
Envoyer un message via MSN à scofield Envoyer un message via Skype™ à scofield
salut ,
sauf , si j'abondone
ALORS PAS D'idée sur la question .
Même pas une
allez !
scofield 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 04h46.


 
 
 
 
Partenaires

Hébergement Web