プリペアド ステートメントを使用して Sybase IQ をクエリすると、問題が発生します。クエリ全体をテキストとして入力し、パラメータなしで PrepareStatement を呼び出すと、クエリは正常に機能します。しかし、1 つのパラメーターに固執すると、SQL が正しい場合でもエラーが返されます。理由はありますか?
このコードは問題なく動作し、クエリを実行します。
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();
しかし、これはまったく同じことですが、コードに「2001」と直接入力する代わりに、パラメーターを使用して挿入します。
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();
[Sybase][ODBC Driver][Adaptive Server Anywhere]Invalid expression near '(SUM(1) over(partition by foobar)) as myColumn' というエラーが発生します。
2番目のものが失敗した場合、最初のものが機能する理由は何ですか? 挿入されたSQLパラメータなどで「partition by」を使用することは許可されていませんか?