|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Bonjour,
Je cherche à créer une procédure permentant d'insérer des valeurs dans une table, mais avant de vérifier l'existence de cette table et la créer si besoin. J'avais penser à créer une exception permetant de créer la table si lors de l'insertion le server renvoyait une erreur, mais j'ai deux problemes à ce niveau : 1° je ne trouve pas l'exception levée pour un table not found. 2° est-il possible de rappeler la procedure à partir d'une exception de cette meme procedure. Syntétiquement voilà e que je pensais faire (la syntaxe n'est pas respéctée c'est juste pour expliquer) : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 50 ![]() |
Pour pouvoir compiler correctement une procédure, tout les objets utilisés (tables, sequences, vues...) doivent exister. Ta table, si tu l'utilises dans un insert "simple" et qu'elle n'existe pas encore empêchera ta procédure de compiler.
Il te faut passer par du SQL dynamique (execute immediate, dbms_sql...). De plus, tu devras octroyer le droit CREATE TABLE à ton utilisateur de manière explicite (pas au travers d'un rôle). Pour vérifier qu'une table existe, compte par exemple le nombre de lignes renvoyées par un select sur la vue user_tables avec une clause WHERE adéquate. Sinon... cherche ailleurs sur ce forum car cette question revient souvent. |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Est-ce le seul moyen ?
En définitive le but est de créer un table si elle n'existe pas et d'insérer une nouvelle ligne dedans. |
|
|
00
|
|
|
#4 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
tu peux faire un truc comme ça :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Oui c'est ce que j'ai décidé de faire en définitive, mais j'étais en train de chercher le nom de user_tables.
Et je trouve pu mes cours sur le dictionnaire de donnée ^^ Merci beaucoup. |
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Voilà aprés quelques péripéties j'en suis arrivé à ça :
Code :
Est-ce il possible de continuer procedure uen fois l'exception levée ? Et si non est-ce que je peux dans l'exception relancer la procedure avec les parametre qu'elle avait reçu en entrée lors du premier appel ? |
||
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 148 ![]() |
Bonjour,
Un truc comme ca serait possible ? Code :
|
||
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
tu peux pas tester ?
|
|
|
00
|
|
|
#10 | ||
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Voilà merci pour vos réponses, j'ai réussi.
Voilà le code final (ya pas de create or replace devant procedure parceque c'est une procedure overridé dans un package). Code :
|
||
|
|
00
|
|
|
#11 | ||||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Tant mieux si ça marche mais je précise pour ceux qui tomberait sur ce post que c'est une très mauvaise pratique, il aurait fallu écrire :
Code :
Code :
|
||||
|
|
00
|
|
|
#12 | |
|
Membre actif
![]() Inscription : juillet 2007 Messages : 246 ![]() |
Ah ben j'ai du mal comprendre cette phrase alors :
Citation:
|
|
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ha oui, en effet, j'avais pas relevé ce "détail"
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com