HELP ME, Плиз!!!

ALTO_MAN
Дата: 14.10.2005 00:41:41
CREATE PROCEDURE TEST 
AS
DECLARE VARIABLE b smallint;
DECLARE VARIABLE NMax integer;
DECLARE VARIABLE CN  VARCHAR(255);
DECLARE VARIABLE TCN  VARCHAR(255);
BEGIN
  b=0;
  NMax=GEN_ID(NEW_MSG,0)-1;
  if (NMax>=0) then
     begin
        /*Следующая выборка работает*/
        CN='O666KT__';
        Select F_GN from T_USB_LIST where (F_GN like :CN) into :TCN;
        if (TCN<>'') then
           begin
           Update t_data_msg set F_GN=:TCN where (F_NUM=:NMax);
           end
        end
     end
END

CREATE PROCEDURE TEST 
AS
DECLARE VARIABLE b smallint;
DECLARE VARIABLE NMax integer;
DECLARE VARIABLE CN  VARCHAR(255);
DECLARE VARIABLE TCN  VARCHAR(255);
BEGIN
  b=0;
  NMax=GEN_ID(NEW_MSG,0)-1;
  if (NMax>=0) then
     begin
     Select F_GN from t_data_msg where (F_NUM=:NMax) into :CN;
     if (SubStr(CN,7,1)='?') then
        begin
        b=1;
        CN=strstuff(CN,7,1,'_');
        end
     if (SubStr(CN,8,1)='?') then
        begin
        b=1;
        CN=strstuff(CN,8,1,'_');
        end
     if (b=1) then
        begin
        TCN='';
/*!!! А тут уже нет, хотя CN, вроде, такой же...*/
        Select F_GN from T_USB_LIST where (F_GN like :CN) into :TCN;
        if (TCN<>'') then
           begin
           Update t_data_msg set F_GN=:TCN where (F_NUM=:NMax);
           end
        end
     end
END

ПОЧЕМУ? Помогите...
использую IB 7 и rFunc от Polaris Software(http://polesoft.da.ru)
SAMZ
Дата: 14.10.2005 06:30:24
Вы уверены в корректности конструкции
where (F_GN like :CN)
В параметре :CN необходимы символы % , задающие правила поиска подстроки.
Вообще в предикатах такого рода я использую STARTING WITH или CONTAINING
ALTO_MAN
Дата: 14.10.2005 20:59:59
В коректности конструкции я не уверен, но как сделать по другому представляю плохо. Да и вопрос не в этом...
Почему первый вариант выдает результат, а второй нет?
ALTO_MAN
Дата: 14.10.2005 21:16:36
Точнее, почему работают
Select F_GN from T_USB_LIST where (F_GN like 'O666KT__') into :TCN;
и
CN='O666KT__';
Select F_GN from T_USB_LIST where (F_GN like :CN) into :TCN;

И не работает
Select F_GN from T_USB_LIST where (F_GN like :CN) into :TCN;

Хотя повторюсь, при пошаговой отладке, наблюдаю как переменная CN из вида 'O666KT??' преображается в 'O666KT__'(в точности как в первом куске). Но все равно первый и второй выборки выдают результат(TCN='O666KT54') а последний нет.

Если есть соображения, плизе, поделитесь!!!
Kull Damned
Дата: 14.10.2005 21:54:02
ммммм, насколько я помню синтаксис LIKE литерал "_" - это один любой сивол, литерал "%" - это люое количество любых символов, однако написав "%%" - мы даем указание искать символ процента - %, логично предположить, что два подчеркивания "__" - это поиск строки с подчеркиванием... Вывод: более детально изучить LIKE, либо пересмотреть сущность запросов.

Posted via ActualForum NNTP Server 1.3

hvlad
Дата: 14.10.2005 22:23:45
Kull Damned
ммммм, насколько я помню синтаксис LIKE литерал "_" - это один любой сивол, литерал "%" - это люое количество любых символов, однако написав "%%" - мы даем указание искать символ процента - %, логично предположить, что два подчеркивания "__" - это поиск строки с подчеркиванием...
Нет
Kull Damned
Вывод: более детально изучить LIKE
Да
Гаджимурадов Рустам
Дата: 14.10.2005 23:18:41
ALTO_MAN
Kull Damned
RTFM Escape