2009-07-06 4 views
0

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のパラメータやそのようなものと "パーティションバイ"を使用することはできませんか?

答えて

0

Adaptive Server Anywhereについてはほとんど知りませんが、Adaptive Server Anywhereドライバを使用してSybase IQをクエリしています。

これは本当に必要なものですか?

1

Sybase(ASA)Adaptive Server Anywhereエラーは問題ありません.IQ DBに含まれているSybase ASAインスタンスがSYSTEM領域に使用されています。

Sybase IQ v12.7より前のバージョンでpartition byがサポートされているか完全にサポートされているかわかりません。私はv12.6でそれに問題があることを思い出します。 v12.7以降ではそれはうまくいくはずです。

関連する問題