2009-03-26 7 views
6

J'ai un lot d'instructions SQL telles que ...Exécuter plusieurs commandes dans un exécutable ExecuteScalar dans Oracle

insérer dans ....; insérer dans ....; supprimer .........;

etc

Lorsque je tente de les exécuter contre oracle il me donne l'erreur this (caractère non valide ORA-00911)

maintenant je peux comprendre que ce soit à cause de la virgule entre les déclarations, j'ai essayé ce sur SQL Server et cela a fonctionné mais dans Oracle pas de chance jusqu'à présent.

Existe-t-il un moyen d'exécuter plusieurs instructions par rapport à Oracle en utilisant ExecuteScalar ou une autre fonction?


DUPLICATE: How can I execute multiple Oracle SQL statements with .NET

Répondre

7

emballage Essayez avec un BEGIN..END

BEGIN insert into.... ; insert into.... ; delete .........; END; 
+0

travaillé pour moi dans SQL Developer. Après je me suis souvenu du; après END. –

+0

Cela a fonctionné pour moi dans Oracle EM. –

0

essayer l'begin ne fonctionne pas pour moi. Ce que j'ai fait a été de faire une nouvelle méthode qui a donné une connexion (j'essaie de minimiser mes connexions ouvertes) il divise les instructions en utilisant le; comme séparateur et exécute chacun séparement

private void ExecuteSql(string statements, IDbConnection conn) 
    { 
     IDbCommand cmd = conn.CreateCommand(); 
     string[] commands = statements.Split(new string[] { ";\r\n", "; ", ";\t", ";\n" }, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string c in commands) 
     { 
      cmd.CommandText = c; 
      cmd.CommandType = CommandType.Text; 
      cmd.ExecuteNonQuery(); 
     } 

     cmd.Dispose(); 
    } 

Mon inspiration est venue de this poste après Petros m'a dit à ce sujet

PS vous devrez peut-être changer en fonction de vos besoins, dans mon cas, je requiers la connexion être ouvert, et fermé en conséquence si quelque chose arrive de l'appelant.

Questions connexes