2012-01-31 6 views
1

je les lignes de code suivant dans un package PL/SQLExécuter l'exécution immédiate d'un package PL/SQL

l_sql := 'alter table LOG_FILES location ('||chr(39)|| filename || to_char(sysdate,'DDMMYY') ||chr(39)||'))'; 
execute immediate l_sql; 

Le paquet pl/sql compile bien, mais je ne vois pas le changement. La commande alter n'a aucun effet. Y a-t-il une raison quelconque pour cela?

Note: Le tableau que je suis en train de changer est un Oracle External table.

+0

Vous dites que le paquet compile bien. Avez-vous exécuté la procédure dans le package qui exécute réellement le SQL dynamique? –

+0

Oui je l'ai fait. Le problème était avec le crochet de fermeture supplémentaire et les guillemets simples échappés - Merci à tous pour votre aide. – ziggy

Répondre

5

Le nom de fichier est une chaîne et doit être placé entre crochets avec des guillemets simples dans la déclaration finale. Pour réussir, vous devez échapper à la citation unique. Une façon consiste à utiliser deux guillemets simples. Donc, votre mission doit ressembler à ceci:

l_sql := 'alter table LOG_FILES location ('''|| filename || to_char(sysdate,'DDMMYY') ||''')'; 
4

Vous avez une parenthèse supplémentaire à la fin de votre déclaration