Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-38234
Smithson
2003-02-05 12:19
2003.02.13
Динамический массив


3-38028
alex_bredin
2003-01-29 10:35
2003.02.13
как сбросить счетчик поля + в базах paradox (кроме удаления пол


14-38567
vajo
2003-01-28 08:38
2003.02.13
Права доступа к папкам и файлам W2000


1-38363
Andrey V.
2003-01-31 09:30
2003.02.13
Пробелы в FreeReport


14-38474
aLEX1.5
2003-01-29 21:43
2003.02.13
Чат для локальной сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский