2009-11-05 6 views
1

J'ai une instruction PL/SQL qui utilise EXECUTE IMMEDIATE pour exécuter une requête. Cependant, j'ai de la difficulté à trouver comment obtenir le texte de la requête en cours d'exécution. Je ne peux pas utiliser dbms_output car la requête est supérieure à 255 caractères. Y at-il un moyen de faire écho sqlplus la chaîne qui est passée à EXECUTE IMMEDIATE?Comment déboguer Oracle SQL dynamique dans sqlplus?

Répondre

3

Quelle version d'Oracle utilisez-vous? 255 est la longueur de ligne par défaut pour DBMS_OUTPUT.PUT_LINE(). Avant 10g, nous pouvions afficher 1048 caractères en un seul appel. Depuis, c'est 32K.

Vous pouvez également envisager d'utiliser un IDE qui prend en charge DBMS_DEBUG. Par exemple, SQL Developer le fait, et il est gratuit à partir d'Oracle. Find out more.

+1

Hmmm ... Je pourrais avoir regardé l'information périmée. Je suppose que cela signifie que rien ne s'est exécuté là où je le pensais. : - / –

0

Vous pouvez essayer d'attacher un profileur à la base de données (honnêtement, je l'ai seulement fait pour SqlServer) et exécuter la procédure puisque le profileur montrera toute requête faite à la DB, vous pourrez le ramasser là et faire le débogage nécessaire. Espérons que cela aide ..

0

Comment imprimer de grandes chaînes N caractères à la fois. Modifier pour répondre à vos besoins.

FOR i IN 0..10 LOOP 
    dbms_output.put_line(substr(my_very_long_string,i*100+1,100)); 
END LOOP; 
0

Vous pouvez insérer la chaîne dans une table de journalisation/temporaire et l'examiner.