Главная страница
    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.48 MB
Время: 0.037 c
3-1083544213
Narayan
2004-05-03 04:30
2004.05.30
n первых записей


8-1079528146
16xmax
2004-03-17 15:55
2004.05.30
Графика


1-1084806749
glGLU
2004-05-17 19:12
2004.05.30
ListBox


8-1079639405
maxXP
2004-03-18 22:50
2004.05.30
Как растянуть видео на всю panel?


3-1083765179
Dimedrol
2004-05-05 17:52
2004.05.30
Компонент типа DBTreeView





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