Jquery DB2中的多参数

Jquery DB2中的多参数,jquery,db2,Jquery,Db2,我正在使用jquery和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(1

我正在使用jquery和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;
END@

您是否在DB2中编译了SP?该SP不工作,您将怎么办?是否从“选择”局部变量中填充值?是否将光标返回给调用方

首先,确保您的SP在DB2中工作,然后尝试从外部应用程序使用。你从哪里犯的错误?您确定显示的SP是数据库中的SP吗

当您在DB2中遇到问题时,最重要的是要显示SQL代码。文本和信息对于理解问题毫无意义

此外,请检查SP,varchar列的最大字符数可以是256个字符,而它的最大字符数为1000个。相反,小char列最好使用char而不是VARCHAR来减少开销。

我的问题解决了

    //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;

执行上述修改后出现错误。

请检查是否将null值传递给vname(或任何其他参数),并使用类似于name=vname的谓词。在这种情况下,您应该得到一个错误。使用“isnull”检查NULL值或谓词,如“NAME=COALESCE(VNAME)”,“我想我们也需要查看您的Java代码,给出错误消息。你给我们的SQL真的运行了吗?它似乎在其他方面是有效的@Alexey—不幸的是,错误消息表明null来自Java端。虽然检查传递的null是一个很好的建议,但其余的则没有什么帮助;首先,将null与任何带有“=”的值进行比较不会返回错误。使用
COALESCE()
进行比较将改变查询的语义,这可能不是他想要的。