Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает запрос, параметрический запрос 
:(
    Опции темы
Valdemaras
Дата 17.3.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Не работает параметрический запрос в Delphi следующего содержания.

Код

select 
             pol_name, 
             sum(Pay_Summa), 
             sum(Pay_Comm_Pay),
             sum(Pay_Comm_Pol) 

from Payments
where   pay_date_oper >= :date_min and 
             pay_date_oper <= :date_max


 
group by Pol_name
order by Pol_name


говорит следующее "ORA-00979 not a Group by expression"!!!

Заполняю параметры следующим образом, и заполнение происходит корректно.
Код

    Form_Report_Pay_1.Query_Pay_Sum.Close;
    Form_Report_Pay_1.Query_Pay_Sum.Parameters.ParamByName('date_min').Value := DE_Begin.Date;
    Form_Report_Pay_1.Query_Pay_Sum.Parameters.ParamByName('date_max').Value := DE_End.Date;
    Form_Report_Pay_1.Query_Pay_Sum.Open;


На последней строке соответственно выводит ошибку. В sql navigator этот запрос работает если подставить реальные даты. Без параметров в Дельфе тоже работает.

КАК СДЕЛАТЬ ЧТОБЫ РАБОТАЛО С ПАРАМЕТРОМ!!???
PM MAIL   Вверх
LSD
Дата 17.3.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Попробуй переписать условие так:
Код
where ( ( pay_date_oper >= :date_min ) and ( pay_date_oper <= :date_max ) )



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Valdemaras
Дата 17.3.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Не помогло, аналогичная ошибка!
PM MAIL   Вверх
bas
Дата 17.3.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



А between не подойдет?
или
Код

select 
             pol_name, 
             sum(Pay_Summa), 
             sum(Pay_Comm_Pay),
             sum(Pay_Comm_Pol) 

from Payments
where   pay_date_oper >= to_char(:date_min,'YYYY-MM-DD')
            and 
             pay_date_oper <= to_char(:date_max,'YYYY-MM-DD')

// или to_date в зависимости какого типа DE_Begin.Date
 
group by Pol_name
order by Pol_name

Формат даты можно узнать
Код

select sysdate from dual;

Добавлено @ 13:19
Цитата(Valdemaras @ 17.3.2006, 11:31 Найти цитируемый пост)
говорит следующее "ORA-00979 not a Group by expression"!!!

Говорит что Идентификатор столбца ни стоит в предложении GROUP BY , ни является аргументом групповой функции.
Либо запрос приеден не полностью или поробуй
Код

group by рol_name
order by рol_name


Это сообщение отредактировал(а) bas - 17.3.2006, 13:10
PM MAIL   Вверх
LSD
Дата 17.3.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Попробуй так:
Код
Form_Report_Pay_1.Query_Pay_Sum.Close;    
Form_Report_Pay_1.Query_Pay_Sum.Open;

он должен выдать ошибку, что не все переменые привязаны.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Valdemaras
Дата 3.4.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 30.1.2006

Репутация: нет
Всего: нет



Вот что работает
Код

select * from payments a,  poluchatel b
where b.pol_check = 1 and 
(a.pay_date_oper between :date_min and :date_max)
order by a.pol_name, a.pay_date_oper


а этот не работает
Код

select 
             pol_name, 
             sum(Pay_Summa), 
             sum(Pay_Comm_Pay),
             sum(Pay_Comm_Pol) 

from Payments
where (pay_date_oper between :date_min and :date_max) 
group by Pol_name
order by Pol_name


все таже ошибка, я панике бегаю по офису и рву волосы на голове соседки! smile smile smile
PM MAIL   Вверх
LSD
Дата 3.4.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Valdemaras @ 3.4.2006, 09:59 Найти цитируемый пост)
я панике бегаю по офису и рву волосы на голове соседки!

Оставь девушку в покое! smile

Попробуй создать такую процедуру:
Код
create or replace and compile java source named TEST as
import java.util.Calendar;
import java.sql.*;
import java.sql.Date;

public class Test
{
  public static ResultSet query() throws SQLException
  {
    Connection conn = DriverManager.getConnection("jdbc:default:connection:");
    PreparedStatement preparedStatement = conn.prepareStatement("select pol_name, sum(Pay_Summa), sum(Pay_Comm_Pay), sum(Pay_Comm_Pol) from Payments where (pay_date_oper between ? and ?) group by Pol_name order by Pol_name");
    Calendar calendar = Calendar.getInstance();
    calendar.clear();
    calendar.set(2005, Calendar.JANUARY, 1);
    preparedStatement.setDate(1, new Date(calendar.getTimeInMillis()));
    calendar.clear();
    calendar.set(2006, Calendar.JANUARY, 1);
    preparedStatement.setDate(1, new Date(calendar.getTimeInMillis()));
    return preparedStatement.executeQuery();
  }
}
/

Код
create or replace package REFCURPKG is
  type REFCUR_T is ref cursor;
end REFCURPKG;
/

create or replace function TEST return REFCURPKG.REFCUR_T as
language java name 'Test.query() return java.sql.ResultSet';


Если отработает нормально, значит проблема чисто в Delphi и дальше надо уже в Delphi-шном разделе спрашивать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.