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

Вниз

Хранримая процедура   Найти похожие ветки 

 
starik30   (2004-05-06 10:48) [0]

Hi, All !

Написал хранимую процедуру, а она работает не правильно... может кто подскажет где туплю (уже все перепробывал  включая backup/restore)...

CREATE PROCEDURE SEARCH_DUPLICATE
RETURNS (
   SESSION_NUMBER1 CHAR (4),
   SEQUENCE_NUMBER1 CHAR (6),
   CORR_SESSION CHAR (4),
   CORR_SEQUENCE CHAR (6),
   ITSELF_MSG VARCHAR (10000))
AS
BEGIN
 for select session_number ,sequence_number, corr_session_num, corr_sequence_num, itself_message  from txt_message where (in_out="O")
 into :session_number1, :sequence_number1, :corr_session, :corr_sequence,  :itself_msg
 do
 begin
   for select session_number , sequence_number  FROM txt_message WHERE  (sequence_number=:corr_sequence) and (in_out="I")
   into :session_number1, :sequence_number1
   do
   begin
    if (session_number1 is not null) then session_number1="-001";
         end
   if (session_number1 is null) then suspend;
   session_number1=null;
 end

END


Использую EMS QuickDesk 2.3.0.1 Использую пошаговую отладку :
при первом проходу дает верный результат, потом почему-то не срабатывает (т.е. не присваиваются значения для session_number1 во втором for select).Да и еще когда просто запускаешь на выполнение процедуру (F9) то выскакивает ошибка Parameter is incorrect. (В SQL editor-е через select  работает нормально кроме результатов ...).

Заранее благодарен.
Юра


 
Соловьев ©   (2004-05-06 10:59) [1]


> Использую EMS QuickDesk 2.3.0.1

http://www.ibexpert.com/rus/ibe_sfx.exe - лучшая для ИБ и клонов, ИМХО конечно :)


>  SESSION_NUMBER1 CHAR (4),
>    SEQUENCE_NUMBER1 CHAR (6),
>    CORR_SESSION CHAR (4),
>    CORR_SEQUENCE CHAR (6),
>    ITSELF_MSG VARCHAR (10000))

точно совпадают типы полей и параметров?


 
Соловьев ©   (2004-05-06 11:01) [2]


> ION_NUMBER1 CHAR (4),
>    SEQUENCE_NUMBER1 CHAR (6),
>    CORR_SESSION CHAR (4),
>    CORR_SEQUENCE CHAR (6),

зачем ? может все-таки VARCHAR?


 
starik30   (2004-05-06 11:21) [3]

да, типы полей совпадают (сейчас поставил varchar в процедуре в таблице оставил char ... результат одинаковый...) при отладке показывает что не присваиваются значения полученные из второго select-а ... непонятно вроде 2 строчки ... а гемору...


 
Соловьев ©   (2004-05-06 11:24) [4]


> (sequence_number=:corr_sequence) and (in_out="I")

вместо = используй LIKE , строковые только так сравниваются и приведи все к VARCHAR, потому как CHAR дополнчется пробелами если длина строки меньше указаного количества символов


 
Курдль ©   (2004-05-06 11:26) [5]


> вместо = используй LIKE , строковые только так сравниваются

Это с какого перепугу?


 
Johnmen ©   (2004-05-06 11:31) [6]

>starik30  

А зачем вообще два вложенных цикла по курсору из одной и той же таблицы ?
Достаточно одного. Но с соединением таблицы самой с собой...


 
Соловьев ©   (2004-05-06 11:32) [7]


> Курдль ©   (06.05.04 11:26) [5]

с такого


 
starik30   (2004-05-06 11:59) [8]

>Johnmen [6] Надо подумать , может и можно просто процедурой на первый взляд казалось проще , а теперь уже и сам факт такого странного поведения

>Соловьев [4] Все привел к varchar (все в таблице и в процедуре )- результат тот же ... может правда уже надо сделать backup/restore ... не понятно почему такое поведение ... если бы условие сравнение (мое первоначальное было  всегда False) ну тогда бы возвращала бы null в переменные , а то ведь значения после первого for select не меняются ...


 
starik30   (2004-05-06 12:02) [9]

попробовал с like таже песня только запрос выполняется дольше ... -(((


 
Соловьев ©   (2004-05-06 12:07) [10]


> starik30   (06.05.04 12:02) [9]

почему советом
> Johnmen ©   (06.05.04 11:31) [6]

не воспользуешся?


 
starik30   (2004-05-06 12:21) [11]

наверное прийдется но сам факт такого поведения ... И что делать когда действительно по другому никак  нельзя будет сделать ?


 
starik30   (2004-05-06 14:58) [12]

> Johnmen ©   (06.05.04 11:31) [6]

Я попробовал изобразить запрос через join но что-то у меня не получается

select b.* from txt_message a inner join txt_message b on a.sequence_number!=b.corr_sequence_num where (b.in_out="O") and a.in_out="I"


 
Johnmen ©   (2004-05-06 15:02) [13]

>starik30   (06.05.04 14:58) [12]
>не получается

В смысле ?

И что значит a.sequence_number!=b.corr_sequence_num ?


 
starik30   (2004-05-06 15:09) [14]

мне необходимо сравнить sequence_number с corr_sequence_num и выбрать только те которых нет в sequence_number ...


 
Johnmen ©   (2004-05-06 15:26) [15]

SELECT * FROM txt_message A
RIGHT JOIN txt_message B ON A.session_number=B.corr_session_num
WHERE (A.session_number1 IS NULL) AND
     (B.in_out="O") AND
     (A.in_out="I")


 
starik30   (2004-05-06 16:30) [16]

м-да все равно не правильно получается ... потому что ли ничего не выбирает (с right) или выбирает только те которые есть (c left) ... кажется с процедурой было бы проще ....


 
starik30   (2004-05-06 16:38) [17]

> Johnmen
извиняюся ... с left join все получилось ...

Спасибо ...


 
Mike Kouzmine ©   (2004-05-06 21:03) [18]

Соловьев ©   (06.05.04 11:24) [4] Прошу прощения, сам недавно работаю, но почему строковые сравниваются только с Like?



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

Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.037 c
14-1083912806
Rule
2004-05-07 10:53
2004.05.30
Помогите радиолюбители


1-1084541238
Beglec
2004-05-14 17:27
2004.05.30
Не могу понять предупреждение компилятора


6-1081396969
valex1
2004-04-08 08:02
2004.05.30
Отправка через MicroSoft Outlook


1-1084879871
ГудБой
2004-05-18 15:31
2004.05.30
Как сделать drag-dock моего окошечка к любой стороне главной форм


1-1084630444
Torin
2004-05-15 18:14
2004.05.30
Регистр





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский