Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

oracle и тип нумбер [D6]


Big_Rom ©   (2003-01-28 07:20:00) 

Доброго всем дня,ночи,вечера и утра
вот такой блин касяк в процедуре сравниваю два нумбера
т.е

OPEN DolgList;
LOOP
FETCH DolgList INTO DolgRecord;
EXIT WHEN DolgList%NOTFOUND;
SELECT NVL(SUM(sumplat), 0) INTO Plats
FROM kbnadmin.plat
WHERE ( plat.nlschet = DolgRecord.nlschet ) AND
( plat.dateplat >= CalcDate );
SELECT NVL(SUM(sumplat), 0) INTO PlatsWrk
FROM kbnadmin.plat_wrk
WHERE ( plat_wrk.nlschet = DolgRecord.nlschet ) AND
( plat_wrk.dateplat >= CalcDate );
--если оплачено не полностью
IF (PlatsWrk) < DolgRecord.SumDlg THEN вот здесь собственно и
вылазит т.е в реале PlatsWrk = DolgRecord.SumDlg и в таблицу встовляется 0.01 почему вроде понятно но как избавится незнаю

INSERT INTO kbnadmin.abonent_ring ( nlschet, phone, dolg )
VALUES ( DolgRecord.nlschet, DolgRecord.phone,
( DolgRecord.SumDlg - PlatsWrk ) );
COMMIT;
END IF;
END LOOP;
CLOSE DolgList;


Big_Rom   (2003-01-28 13:18:00) [1]

я к этому и пришел (долголи коротко) :))

ладно попробую


roottim   (2003-01-28 13:14:00) [2]

и все-же убери ограничения.. просто number и все.
а в DOS базу делай round(pole,2) .. проблем-то тут нет


Big_Rom   (2003-01-28 12:58:00) [3]

дело втом что моя програма надстройка над другой старой при старой
еще досовской (так мысли в слух)
и там ограничение 10,2 а поскольку после меня данные идут туда
то зделал также
кстати ошибка не ушла после приведения к типу непомогло

наверно лучьше повеситься
что самое интересное считает она правильно где суумы больше нуля
только при равном долге и платежах така @ поевляется



roottim   (2003-01-28 12:15:00) [4]

я никогда не ставлю ограничение, особенно в платежах, и таких проблем небыло...
все же наверняка при формировании курсора происходит какая то фигня.. попробуй в курсоре указать на поле SumDlg
cursor my_cur is select ... , cast(t.SmDlg as number(10,2)) as sumDlg, .. from ...


Big_Rom   (2003-01-28 12:04:00) [5]

угу DolgRecord.SumDlg тот-же формат


Sergey13   (2003-01-28 11:47:00) [6]

А у DolgRecord.SumDlg тот-же формат?


Big_Rom   (2003-01-28 11:32:00) [7]

create table PLAT_WRK
(
NLSCHET NUMBER(6) not null,
PHONE NUMBER(6) not null,
DATEPLAT DATE not null,
SUMPLAT NUMBER(10,2) not null,
PLACEPLAT NUMBER(2) not null,
NPLACEPLAT VARCHAR2(27),
NUMPLAT NUMBER(2) default 0 not null,
PACKETNUM NUMBER(3) default 0 not null,
DOCNUM NUMBER(3) default 0 not null,
CODE_TYPE NUMBER(2),
NAME_TYPE VARCHAR2(13),
COPERGET NUMBER(2),
COPERRUN NUMBER(2),
STPLAT NUMBER(1) default 1 not null,
MEMO VARCHAR2(50)
)

вот формат полей для плат
заносятся иммено sumplat ручной ввод вот :))


Sergey13   (2003-01-28 11:13:00) [8]

2Big_Rom © (28.01.03 10:37)
>а если платежей нет то будет нул для этого я nvl туда и поставил
А если запись по платежу есть, а суммы самого платежа нет? Твоя схема будет работать правильно, если только стоит sumplat not null или есть значение по умолчанию.
И недурно все таки глянуть на формат полей, и каким макаром они заносятся - простой ручной ввод или ввод значения какого то расчета.


Big_Rom   (2003-01-28 10:47:00) [9]

хотя зачем ее тросировать и так я знаю что там есть
только если посмотреть что из селекта выходит ?


Big_Rom   (2003-01-28 10:37:00) [10]

все ясно буду пробовать тросиравать процедуру
потом скажу что получилось
вопрос

а если платежей нет то будет нул для этого я nvl туда и поставил

з.ы. вот так день и кончился :))


dragon   (2003-01-28 10:24:00) [11]

а есть ли данные в запросах удовлетворяющие указанным условим?
поставь селекты в exception ... end; посмотри, что получится


Sergey13   (2003-01-28 10:06:00) [12]

2Big_Rom © (28.01.03 09:34)
>как ето лишено если sumplat=null то 0 пишем
А так и лишено. В твоем случае NVL(SUM(sumplat), 0) ты проводишь проверку на NULL конечного результата функции SUM. А надо наоборот, иначе функция может вернуть неправильное значение ("если sumplat=null").
Формат полей sumplat в обеих таблицах одинаков?


roottim   (2003-01-28 09:36:00) [13]

>т.е в реале PlatsWrk = DolgRecord.SumDlg
Насколько в реале...
есои есть PL/SQL Developer протрассируй эту функцию и посмотри переменные "в реале"


Big_Rom   (2003-01-28 09:34:00) [14]

как ето лишено если sumplat=null то 0 пишем
хотя и повторой схеме ответ тодже

вылазит собственно то что в таблицу вставляется 0.01
DolgRecord.SumDlg - PlatsWrk зночит = 0.01
но в условии < ,а когда ручками считаю то у меня = недолжен он
вставлять 0.01
вот собственно проблема

з.ы. если что забыл говорите :))


Sergey13   (2003-01-28 08:50:00) [15]

> вот здесь собственно и вылазит
А чего вылазит то?
Ты поподробнее опиши проблему, может и разберется кто и подскажет чего нить. Курсор свой расшифруй, например. Код ошибки дай. А то сунул кусок кода - и вылезает там что-то.
На вскидку, непонятна конструкция NVL(SUM(sumplat), 0) может наоборот надо SUM(NVL(sumplat, 0)) а то вроде как всякого смысла лишено.


Наверх

Титульная страница Поиск, карта сайта Написать письмо