Est-il possible d'automatiser la création d'une séquence sur un CREATE TABLE.
Je suis débutant sur PL SQL et je m'interesse aux triggers...
Merci de vos réponses.
Version imprimable
Est-il possible d'automatiser la création d'une séquence sur un CREATE TABLE.
Je suis débutant sur PL SQL et je m'interesse aux triggers...
Merci de vos réponses.
Bonjour,
Que veux tu faire exactement ?
techniquement Oui , c'est possible de creer automatiquement une sequence
Sinon ,un trigger ca doit etre quelque chose d'exceptionnel et non systematique ...
c'est source d'erreur,de blocage, de bug
moins on en crée , mieux la base se portera.
On peut inserer dans une table avec sequence sans trigger ...
Ce que je veux faire c'est automatiser l'incrémentation de l'identifiant à la création d'une table. C'est vrai que je suis un peu flemmard... Non sans rire, je suis en formationj et j'ai fini le programme sur oracle alors je cherche par moi même. Je ne cherche pas des solutions toutes faites mais des pistes. :D
Quand j'essaye jusqu'à maintenant de créer une séquence à partir d'un trigger basé sur un évènement système, j'obtiens une erreur à chaque fois, je cherche donc une piste pour contourner cette erreur.
VOICI LE TRIGGER QUE JE VOUDRAIS REALISER :
CA COMPILE BIENCode:
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE TRIGGER "TRIGGER1" AFTER CREATE ON USER1.SCHEMA DECLARE LOC VARCHAR2(200); BEGIN IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN LOC := 'CREATE SEQUENCE "SEQUENCE_"'||ora_dict_obj_name||' INCREMENT BY 1 START WITH 1'; EXECUTE IMMEDIATE LOC; END IF; END;
TRIGGER "TRIGGER1" Compiled.
MAIS A L'UTILISATION :
Error starting at line 1 in command:
CREATE TABLE TOTOS (ID_TOTO NUMBER, AZER VARCHAR2(50), CONSTRAINT PK_TOTOS PRIMARY KEY (ID_TOTO))
Error at Command Line:1 Column:0
Error report:
SQL Error: ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-30511: opération DDL non valide pour les déclencheurs système
COMMENT CONTOURNER LE PROBLEME, OU BIEN MON CODE COMPORTE-T-IL UNE ERREUR?
tu peux creer un job dans ta procedure qui fera le boulot.
:king: MERCI POUR LE CONSEIL JE VAIS ESSAYER...
MAIS UN PEU DE DOC SUR LES JOBS...:mrgreen: SI POSSIBLE
THANKS A LOT
JE CHERCHE TOUT SEUL POUR LA SUITE
SI J'AI DES SOUCIS AVEC LES JOB JE RE-POSTE UN MESSAGE.
MERCI A TOUS LES DEUX POUR VOS REPONSES ET VOTRE DISPONIBILITE;
:yaisse2:
tu sais que tu peux désactiver le verrouillage majuscule de ton clavier ?
Bonjour,
En cherchant une solution à mon problème, je suis tombé sur ce fil de discussion et j'aurai une question :
Je voulais savoir si un trigger dans le même style mais modifié comme suit pourrait être possible (celui-ci ne fonctionne pas, il est créé avec des erreurs de compilation)
Pour que lorsque je créerai ma table nom_table, le trigger se déclence et crée une séquence pour cette nouvelle table avec une valeur de départ égale au plus grand id d'une autre table.Code:
1
2
3
4
5
6
7
8
9
10
11
12 CREATE OR REPLACE TRIGGER "TRIGGER1" AFTER CREATE ON USER1.SCHEMA DECLARE LOC VARCHAR2(200); BEGIN IF ORA_DICT_OBJ_NAME = 'nom_table' THEN LOC := 'CREATE SEQUENCE "SEQUENCE_"'||ora_dict_obj_name||' INCREMENT BY 1 START WITH '||semect max(id) from ma_table; EXECUTE IMMEDIATE LOC; END IF; END;
Merci de me dire si une telle chose est possible ou non (je cherche de mon coté mais je ne trouve rien dans ce style, mais ça ne coute rien de demander ^^ )
Merci d'avance
De mémoire, il n’est pas possible tel quel. Mais, il est possible de le créer via un job programme par le trigger.
Le problème c'est qu'en regardant un peu certains cours sur les jobs j'ai rien compris :?
si ça peut aider (j'ai oublié le lien dans mon autre post) voici le fil de discussion que j'ai créé pour mon problème