2010-07-14 2 views
0
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 для даты. , когда я указываю формат i.e dd-mm-yy в функции to_char, он дает ошибку. пожалуйста, помогите ..Как должны быть параметризованы запросы на основе даты в Oracle

+3

Пожалуйста, отформатируйте свой код, используйте знаки пунктуации и заглавные буквы и сообщите нам **, что говорит об ошибке **! – Quentin

+0

Это может также помочь узнать, что такое 'st'. –

ответ

1

Так вы работаете:

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

Первое, попробуйте поместить эту строку в переменной, выход его и посмотреть, если он находится в правильном формате.

Вы пробовали:

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

, кажется, что вы делаете ненужные акробатики с этой строкой.

И, наконец, взгляните на «Oracle to_char usage» от Burleson Consulting. Это была первая ссылка от Google. Некоторые говорят, что Google - хорошее место, чтобы выглядеть первым.

+3

+ 1 «Некоторые говорят, что Google - хорошее место, чтобы выглядеть первым». - Да, просто жаль его всегда b **** Y Burleson, который выходит на первое место! –

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 для привязки переменной. Вы можете обнаружить, что вы можете даже привязать переменную даты изначально, не преобразовывая ее в строку.

+0

+1 особенно для переменных привязки. Если это .Net, то я думаю, что синтаксис: to_char (?, 'Dd-mm-yy') –

Смежные вопросы