|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : mars 2005 Messages : 64 ![]() |
Bonjour,
J'ai une procédure PL/SQL qui doit vider une table entière, j'ai donc voulu utilisé un truncate au lieu d'un delete (trop gourmand en temps d'exécution). Petit problème : j'ai une erreur sur le truncate à la compilation de ma proc. ma syntaxe est bonne pourtant. Le truncate est bien possible dans une proc PLSQL ? Merci pour vos réponses |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Truncate, ce n'est pas du SQL donc ça ne se compile pas dans du PL/SQL, cependant on peut passer en indirect par:
Code :
EXECUTE IMMEDIATE 'TRUNCATE TABLE SO3'
|
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
attention, ça commit la transaction
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Citation:
Dans ce cas, si l'on veut éviter ce principe, n'est-il pas possible d'encapsuler le code exécuté par EXECUTE IMMEDIATE dans une transaction autonome ? |
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Salut Magnus,
Oui, cela committe parce que c'est une instruction DDL (=> commit implicit) On peut tout à fait encapsuler cela dans une procédure autonome, attention néanmoins au lock.
__________________
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. |
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Inscription : mars 2005 Messages : 64 ![]() |
merci beaucoup. Je ne savais pas
|
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est bien ce qu'il dit quand il prévient de faire attention aux locks
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Citation:
Dans ton exemple, la procédure appelante ne modifie pas la structure de la table TOTO et pourtant l'invocation de la procédure génère un message d'erreur. Je ne comprends pas ta dernière phrase, tu peux la reformuler s'il te plait ? |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Désolé, je me suis peut etre mal exprimé effectivement...
Je parlais simplement de modification des données, c'est a dire quelque chose qui provoque un lock. Une modification de structure provoquerait aussi un commit implicite donc le problème ne se poserait pas. |
|
|
00
|
|
|
#11 | |||
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Citation:
J'ai donc finalement compris ton idée mais regarde ce que j'obtiens sur une base en 10gR1 : Code :
Ceci dit, je m'étonne de voir que la méthode call ne fonctionne pas chez moi. J'en profite pour te demander si tu n'aurais pas une explication par hasard (j'imagine bien que c'est complètement indépendant de ce topic) au fait que cette commande soit inconnue ? |
|||
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Eh oui je sais... pas de parenthèse à la déclaration, pas de parenthèse à l'interrieur d'un block, mais des parenthèses pour un call...
|
|
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Ah oui ok je vais m'acheter des lunettes..... ![]() Ceci dit, je comprends pas... chez moi j'ai essayé avec le sqlplus classique et avec le sqlplus-worksheet ça fonctionne en 10gR2 en 9i et en 8i. La seule version que j'ai pas c'est la 10gR1....... |
|
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Code :
Merci pour les explications. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com