Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизХранримая процедура Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.038 c