Au sein de votre bloc PL/SQl, vous souhaitez exécuter un ordre DDL (CREATE, DROP, ...).
Par exemple, pour supprimer une table, vous procèderiez ainsi:
DECLARE
- variables
BEGIN
- traitements
- ordre DDL
- autres traitements
END; /
PLS-00103: Symbole "DROP" rencontré à la place d'un des symboles suivants :begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge <a single-quoted SQL string> pipe
Oracle n'est pas capable de traiter un ordre DDL de cette manière au sein d'un bloc PL/SQL. Pour contourner cette limitation, il faut passer par l'utilisation de SQL dynamique ! Ceci se fait via la commande EXECUTE IMMEDIATE. Ainsi, si l'on applique cette technique à l'exemple ci-dessus, cela donnerait:
DECLARE requeteDDL VARCHAR2(255);
- autres variables
BEGIN
- traitements
- ordre DDL
- exécution de l'ordre DDL
- autres traitements
END; /
