2009-10-14 5 views
0

J'utilise SQL Plus 11.1.0.6.0 pour exécuter un script qui effectue des insertions par lots dans une base de données Oracle 10g. Le problème que j'ai remarqué est lors de l'insertion une chaîne de code dans un champ de clob qui a des lignes avec des espaces de fuite tels que:SQLPlus supprime les espaces de fin dans le champ clob sur l'insertion

....public void myMethod().... --trailing space here 
....{ 
........int myVar = 1; 
........ -- empty line with trailing spaces 
........myVar+=1 
....} 

La chaîne qui est insérée dans le tableau desserre les espaces vides de fuite dans les lignes vides et devient:

....public void myMethod() --trailing space is lost 
....{ 
........int myVar = 1; 
-- empty line without trailing spaces 
........myVar+=1 
....} 

Bien qu'il ne fait aucune différence pour les données utiles, ce qui est très frustrant parce que cela cause les données diffèrent de l'original et échoue des tests.

Tout ce que j'ai pu trouver était SET TRIMSPOOL/TRIMOUT OFF qui ne change rien, est-ce que quelqu'un a d'autres idées?

+2

Pouvez-vous poster le script que vous utilisez? –

Répondre

0

Sans publier votre script, il est difficile d'être sûr, mais vous ne devriez probablement pas insérer des chaînes de texte directement dans une CLOB dans SQL Plus. Si vous deviez utiliser un processus PL/SQL qui a tiré dans votre texte à partir d'un fichier et appelez le PL/SQL à partir de SQL Plus il devrait garder tout le formatage.

Mais cela peut être un PITA tout-puissant. Mais c'est bien documenté dans les textes O'Reilly PL/SQL.

0

En fin de compte je l'ai résolu par un hack comme celui-ci (en considérant par exemple d'origine):

declare 
myLargeValue_2 clob; 
begin 
myLargeValue_2 := '....public void myMethod()'||'.... 
'||'....{ 
........int myVar = 1; 
'||'........' -- empty line with trailing spaces 

and so on 

Fondamentalement concaténés explicitement tous les espaces blancs

0

Vous pouvez essayer d'activer le paramètre suivant:

SET SQLBLANKLINES ON 
Questions connexes