如何参数化Oracle中基于日期的查询

时间:2010-07-14 10:10:00

标签: sql oracle

ResultSet rs=st.executeQuery(
    "select j.vc_jo_no,
            j.dt_jo_date,
            p.vc_product_name 
     from mst_jobcard j,
          mst_prod p 
     where j.vc_product_code=p.vc_product_code 
     and   j.dt_jo_date=to_char("+tdate+","+"'"+dd-mm-yy+"'"+")
    ");

在我指定的查询中,它应该根据上述查询中传递的日期参数显示记录。 vc_jo_no,dt_jo_date取自mst_jobcard表,vc_product_name取自mst_prod表。 我加入了桌子。 请帮助我如何使用to_char函数的日期。 当我在to_char函数中指定格式即dd-mm-yy时,它会给出错误。 请帮忙..

2 个答案:

答案 0 :(得分:4)

如果您要将日期作为字符串传递,Oracle需要将其包含在单引号中。此外,“dd-mm-yy”对我来说不合适。试试这个:

ResultSet rs=st.executeQuery(
"select j.vc_jo_no,
        j.dt_jo_date,
        p.vc_product_name 
 from mst_jobcard j,
      mst_prod p 
 where j.vc_product_code=p.vc_product_code 
 and   j.dt_jo_date=to_char('"+tdate+"','dd-mm-yy')
");

也就是说,这种传递参数的方法实际上并没有传递参数 - 它会导致数据库针对请求的每个不同日期解析不同的查询,这可能会导致可伸缩性问题。

更好的方法是绑定参数,使用ResultSet提供的任何方法绑定变量。您可能会发现甚至可以本地绑定日期变量,而无需将其转换为字符串。

答案 1 :(得分:1)

所以你正在运行:

executeQuery("select … where … j.dt_jo_date=to_char("+tdate+","+"'"+dd-mm-yy+"'"+")");

首先,尝试将该字符串放入变量中,输出它并查看它是否格式正确。

你试过了吗?

"… to_char("+tdate+",'dd-mm-yy'")

看来你正在用那个字符串做不必要的杂技。

最后,看看Burleson Consulting的“Oracle to_char usage”。这是Google的第一个链接。有人说谷歌是一个先看的好地方。