Sybase IQに準備済みの文を問い合せるときに問題が発生しました。クエリ全体をテキストとして入力し、パラメータなしでPrepareStatementを呼び出すと、クエリはうまく動作します。しかし、私は1つのパラメータに固執すると、私のSQLが正しいにもかかわらず、私はエラーを返す。どんな考え?"partition by"を使用してプリペアド・ステートメントがSybase IQに対して機能しませんか?
:私はパラメータでそれを挿入し、直接コードに「2001」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();
しかし、これではなく、タイピングのを除いて、まったく同じものです:
このコードは完全に正常に動作し、私のクエリを実行します
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ドライバー] [Adaptive Serverのどこでも]の近くに無効な式 '(SUM(1)foobarにすることによって(パーティション)を超える)MYCOLUMNとして'
2番目のものが失敗した場合、最初のものがなぜ機能するのか?あなたは、挿入されたSQLのパラメータやそのようなものと "パーティションバイ"を使用することはできませんか?