2009-07-06 72 views
0

使用預準備語句查詢Sybase IQ時出現問題。查詢工作正常時,我鍵入整個查詢作爲文本,然後調用PrepareStatement沒有參數。但是當我堅持一個參數時,即使我的sql是正確的,我也會返回錯誤。任何想法爲什麼?使用「partition by」編寫的語句不適用於Sybase IQ?

此代碼工作完全正常,運行我的查詢:

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驅動程序] [Adaptive Server Anywhere的]附近的表達式無效 '(SUM(1)在(由foobar的分區)),爲myColumn'

任何想法爲什麼第一個工程,如果第二個失敗?你不允許使用插入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或更高版本中,它應該沒問題,否則你的命令對我來說看起來不錯。