|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Inscription : août 2004 Messages : 665 ![]() |
Bonjour,
Je fais un script sql d'upgrade pour modifier des tables. Je veux pouvoir appliquer ce script sur des bases qui ont ou qui n'ont pas déjà été upgradées. Il me faut alors pouvoir tester si ma table est dans l'ancien modèle ou le nouveau. Des qu'une table est modifiée, je la renomme en old_table et la recrée avec la nouvelle definition puis la remplit à partir de old_table (cette façon de faire est éprouvée depuis longtemps). Ca devrait ressembler à ça : Code :
Merci de votre aide |
||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() |
Bonjour,
Un message d'erreur pourrait nous aider. Ceci dit, ce qui ne peut pas fonctionner est l'instraction CREATE TABLE au milieu d'un bloc PL/SQL : il s'agit d'une instruction DDL alors que seuls les ordres DML sont autorisés en PL/SQL. L'astuce consiste à "cacher" cet ordre DDL dans un EXECUTE IMMEDIATE : Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : août 2004 Messages : 665 ![]() |
Mais oui, c'est tout à fait cela : encapsuler mon ordre dans un execute immediate.
Merci beaucoup |
|
|
00
|
|
|
#4 | ||||
|
Membre confirmé
![]() Inscription : août 2004 Messages : 665 ![]() |
J'ai testé le 'CREATE' encapsulé dans le 'execute immediate' et c'est bon. Par contre le 'execute droptable('OLD_CONTROL')' n'est pas reconnu :
Code :
Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com