2012-09-23 35 views
1

我使用jQuery和DB2。我收到以下錯誤執行時間
多參數在DB2

Error:SQL:The OdbcParameterCollection only accepts non-null OdbcParameter type objects, not OleDbParameter objects. 

我的DB2 SQL

Create procedure myparameters(
IN vname VARCHAR(500), 
IN vurl VARCHAR(1000), 
IN vyear VARCHAR(10), 
IN vmonth VARCHAR(10) 
) 
language sql 
BEGIN ATOMIC 
SET vname = '~p_hostname~'; -- these tild values are coming from jquery 
SET vurl = '~p_url~'; 
SET vmonth = '~p_month~'; 
SET vyear = '~p_year~'; 
select hour as hours,tvalue as seconds from myschema.my_view 
WHERE 
    name = vname and 
    url= vurl and 
    month = CAST(vmonth AS INT) and 
    year = CAST(vyear AS INT) and 
    VALUE_TYPE ='access Time' 
order by hour; 
[email protected] 
+0

如果你傳遞null值VNAME(或任何其它參數),並使用predicat如姓名= VNAME請檢查。在這種情況下,你應該得到錯誤。使用「IS NULL」檢查空值或謂詞,如「NAME = COALESCE(VNAME,'')」 – Alexey

+0

我想我們還需要查看您的Java代碼,並給出錯誤消息。你給我們的SQL實際運行了嗎?這似乎是有效的,否則... @Alexey - 不幸的是,該錯誤信息表明空從Java端來了。雖然檢查通過的空值是很好的建議,其餘的則不太有用;一方面,比較空與「=」東西永遠不會返回一個錯誤。並且使用'COALESCE()'進行比較將改變查詢的語義,這可能不是他想要的。 –

回答

0

我的問題就解決了

//I defined variable in jquery like this: 
var parameter; 
parameter += '|p_hostname=' + $('#hname').val(); 
parameter += '|p_url=' + $('#hurl').val(); 
parameter += '|p_month=' + $('#hMonth').val(); 
parameter += '|p_year=' + $('#hYear').val(); 

--db2 SQL-- 
select 
    url as URL 
    ,hour as Time 
    ,value as URL_Time 
from myschema.my_view 
where 1=1 
    and name = '~p_hostname~' 
    and url ='~p_url~' 
    and cast(month as int) = cast('~p_month~' as int) --Problem occured here 
    and cast(year as int) = cast('~p_year~' as int) --Problem occured here 
    and VALUE_TYPE ='access Time' 
order by 
    hour; 

錯誤以上修改後做了。

0

你有編譯DB2中的SP?該SP不起作用,你打算怎麼辦?從局部變量中選擇填充值?將光標返回給調用者?

首先,確保你的SP工作在DB2,之後試圖從外部應用程序使用。你從哪裏得到這個錯誤?你確定顯示的SP是DB中的嗎?

當你在DB2中的問題,展現出最重要的是SQLCODE。文本和消息對理解問題沒有意義。

另外,檢查SP,一個varchar列可以是256個字符最大值,並且您有1000個字符。相反,小char列最好使用CHAR來代替VARCHAR來減少開銷。