|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
bonjour,
j'essaie de créer un utilisateur dans un trigger suite à une insertion dans une table. je récupère une erreur lors de l'insertion dans la table dû au trigger mais je ne vois pas c'est quoi au juste PS: l'utilisateur qui exécute ceci à le droit de créer des utilisateur! le voila mon code: Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Quelle est la règle N°1 quand on code de l'execute immediate ?
Réponse : Toujours AFFICHER la chaine exécutée et vérifier que la requête est correcte.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
maintenant je l'ai essayé comme ceci ( j'espére ne pas avoir commis de bétises) Code :
|
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Ça ne va pas aller: create user c’est du DDL et le DDL commit, ce qui n’est pas permis pour le trigger sauf s’il s’exécute dans une transaction autonome; mais ça montre souvent une incompréhension des triggers et transactions autonomes.
Utilisez donc DBMS_JOB via le trigger pour créer votre utilisateur ! |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Il manque un espace devant 'default tablespace'
__________________
Garuda गरूड Brahmâ la Guerre et Vishnu la Paix Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010 |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Visiblement l'erreur est au niveau compil du trigger et pas de l'exécution (Déclencheur 'ADMIN_BIB.CONN_USER' non valide)
Faire un show errors après la compil pour vérifier les erreurs. Chez moi il se compile bien (en mettant des valeurs de colonne des :new correspondant à ma table compte).
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#7 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Pour moi, avoir des opérations non transactionnelles ou asynchrones dans un déclencheur DML est une hérésie.
Il me paraît nettement plus propre de créer une procédure creer_compte, qui se chargera de créer le compte si nécessaire, et de l'insérer dans la table.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
20
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Ca reste toujours discutable. Je pense que le plus important est de bien comprendre qu’elles sont les implications. Ensuite le choix de la solution pourrait dépendre des autres contraintes.
|
|
|
20
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
Si j'ai bien compris je ne peut pas créer des utilisateurs via des triggers, je dois passer par un DBMS_JOB. mais d'après ce que j'ai lu DBMS_JOB c'est pour exécuter des requêtes chaque t moment alors que moi je veux le faire a chaque insertion dans la table compte. j'essaierais la proposition de Pomalaix de créer la procedure puis l'appeler dans le trigger |
|
|
00
|
|
|
#10 | |||||
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Citation:
Code :
Code :
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|||||
|
|
10
|
|
|
#11 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
merci beaucoup
avec pragma autonomous_transaction; toujours des problemes mais la deuxieme méthode de Code :
une question : est ce que je peux appeler cette procédure dans mon trigger sans aucun problème, parce que j'avais essayé de créer l'utilisateur dans une procédure et appeler cette dernière dans un trigger, c'était pas bien le résultat |
||
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Maintenant ce que vous propose Pomalaix est de complètement abandonner le trigger et de regrouper les deux actions dans une procédure que vous allez appeler à la place de l’insert dans votre table compte. |
|
|
|
10
|
|
|
#13 |
![]() Inscription : décembre 2002 Messages : 2 385 ![]() |
Oui, et lesquels ? Tant que vous ne précisez pas votre source PL/SQL et le message d'erreur, on ne peut rien faire pour vous.
__________________
Consultant / formateur Oracle indépendant Certifié OCP 10g et 11g, sécurité 11g |
|
|
00
|
|
|
#14 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
Citation:
Code :
Citation:
Je reviens sur les DBLS_JOB, un exemple simple pour leurs utilisation selon ce que j'ai compris: Code :
![]() |
||||||
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Dans dbms_job vous n'envoyez que la partie non-transactionnelle : create user …
L’exécution du dbms_job doit être immédiate et il n’y a aucune raison de ré exécuter ce job. |
|
|
00
|
|
|
#16 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2008 Messages : 53 ![]() |
dans ce cas a quoi sert le interval=>'sysdate+1/24') et je suppose puisqu'on n'envoie que la partie non transactionnelle je dois l'appeler au moment de l'insertion n'est ce pas? alors comment faire?
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com