Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

oracle и тип нумбер   Найти похожие ветки 

 
Big_Rom ©   (2003-01-28 07:20) [0]

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

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;


 
Sergey13 ©   (2003-01-28 08:50) [1]

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


 
Big_Rom ©   (2003-01-28 09:34) [2]

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

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

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


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

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


 
Sergey13 ©   (2003-01-28 10:06) [4]

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


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

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


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

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

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

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


 
Big_Rom ©   (2003-01-28 10:47) [7]

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



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

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


 
Big_Rom ©   (2003-01-28 11:32) [9]

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:47) [10]

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


 
Big_Rom ©   (2003-01-28 12:04) [11]

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



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

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


 
Big_Rom ©   (2003-01-28 12:58) [13]

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

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




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

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


 
Big_Rom ©   (2003-01-28 13:18) [15]

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
1-38383
Diod
2003-02-02 07:33
2003.02.13
Фйлы и edit


3-38128
4x4
2003-01-28 12:07
2003.02.13
Соединение строк в DBGrid?


1-38218
Andrey___
2003-02-05 09:08
2003.02.13
Создание пунктов в меню


3-38074
LazorenkoX
2003-01-27 11:59
2003.02.13
Печать


1-38332
kkostik
2003-02-03 17:32
2003.02.13
Запуск функции