0

プリペアド ステートメントを使用して 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」を使用することは許可されていませんか?

4

2 に答える 2

1

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

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

于 2009-07-08T17:53:16.127 に答える
0

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

それは本当にあなたが望むものですか?

于 2009-07-07T18:40:35.313 に答える