impossible d'exécuter la maternelle en vrac manipulation de la requête
Je suis en train de mettre en œuvre un "s'il existe, mise à jour, sinon, insérer" méthode d'accès aux données dans NHibernate. Ma base de données Oracle 10g.
Je suis l'obtention de cette "impossible d'exécuter la maternelle en vrac manipulation de la requête" erreur lorsque vous essayez d'exécuter ce code, si je lance l'insertion ou la mise à jour individualy, il fonctionne très bien.
Merci!
string sql = @"DECLARE
CntOfRow Number(10,0);
BEGIN
SELECT count(*)
INTO CntOfRow
FROM Table1
WHERE
QueID=:QueID
IF CntOfRow=0 THEN
INSERT INTO Table1 ...;
ELSE
UPDATE Table1 ... ;
END IF;
END;";
INHibernateSession session = NHibernateSessionManager.Instance.Session;
try
{
session.BeginTransaction();
ISQLQuery query = session.GetISession().CreateSQLQuery(sql.Replace(System.Environment.NewLine, " "));
query.SetParameter("QueID", queID);
query.ExecuteUpdate();
session.CommitTransaction();
}
catch (Exception ex)
{
session.RollbackTransaction();
throw;
}
OriginalL'auteur nandin | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Vous semblent manquer un
;
après laSELECT
Ce lien pourrait également être d'intérêt pour vous.
Que sur l'insertion/mise à jour, voir l'instruction MERGE. Il fonctionne comme ceci:
Voir aussi cette rubrique
Dans le premier lien que vous fournissez, il y a un très utile commentaire: Montre propriété InnerException.
OriginalL'auteur Marius Burz
Je ne sais pas pourquoi vous obtenez cette erreur, mais vous pouvez essayer cette méthode simple PL/SQL bloc plutôt:
il ne fonctionne pas non plus, en quelque sorte, NHibernate retirez toujours la ; de l'instruction de mise à jour. Je suis d'erreur différent cette fois-Oracle.DataAccess.Client.OracleException ORA-06550: ligne 1, colonne 1749:\nPL/SQL: ORA-00933: commande SQL n'est pas correctement terminé\nORA-06550: ligne 1, colonne 1123:\n
OriginalL'auteur Tony Andrews
Aller à un client Oracle comme le Crapaud ou de l'Éditeur SQL et essayez d'exécuter la procédure avec les mêmes paramètres que vous envoyez par Hibernate.
Dans mon cas, Oracle a été de lancer une erreur comme:
La cause a été une sélection à l'intérieur de la fonction/procédure. Ensuite, améliorer la fonction/procédure pour attraper ces exceptions.
OriginalL'auteur Ferran Basora