Je rencontre un problème lors de l'interrogation de Sybase IQ avec une instruction préparée. La requête fonctionne correctement lorsque je tape la requête entière en tant que texte, puis appelez PrepareStatement dessus sans paramètres. Mais quand je m'en tiens à un paramètre, je récupère des erreurs, même si mon sql est correct. Une idée pourquoi?Une instruction préparée avec "partition by" ne fonctionne pas avec Sybase IQ?
Ce code fonctionne parfaitement bien et exécute ma requête:
errorquery<<"SELECT 1 as foobar \
, (SUM(1) over (partition by foobar)) as myColumn \
FROM spgxCube.LPCache lpcache \
WHERE lpcache.CIG_OrigYear = 2001 ";
odbc::Connection* connQuery= SpgxDBConnectionPool::getInstance().getConnection("MyServer");
PreparedStatementPtr pPrepStatement(connQuery->prepareStatement(errorquery.str()));
pPrepStatement->executeQuery();
Mais c'est exactement la même chose, sauf au lieu de taper « 2001 » directement dans le code, je l'insère avec un paramètre:
errorquery<<"SELECT 1 as foobar \
, (SUM(1) over (partition by foobar)) as myColumn \
FROM spgxCube.LPCache lpcache \
WHERE lpcache.CIG_OrigYear = ? ";
odbc::Connection* connQuery = SpgxDBConnectionPool::getInstance().getConnection("MyServer");
PreparedStatementPtr pPrepStatement(connQuery->prepareStatement(errorquery.str()));
int intVal = 2001;
pPrepStatement->setInt(1, intVal);
pPrepStatement->executeQuery();
qui donne cette erreur: [Sybase] [ODBC Driver] [Adaptive Server Anywhere] expression non valide à proximité '(SUM (1) sur (partition par foobar)) comme mycolumn'
Une idée de pourquoi le premier fonctionne si le second échoue? N'avez-vous pas le droit d'utiliser "partition by" avec les paramètres sql insérés ou quelque chose comme ça?