CftClub.ru
Клуб специалистов ЦФТ-Банк

«Грабли» на которые легко наступить!

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
w00per
Профи


Вступление в Клуб: 17.10.2007
СообщениеЧт Мар 25, 2010 18:05   «Грабли» на которые легко наступить! Ответить с цитатой
Полезность: 1
Наткнулся на пост и вспомнил, что сам наступал на эти "грабли", а потом долго не мог понять в чем же дело.
Решил написать, может кому окажется полезным.
Вариант 1 (PL\PLUS)
Код:
select x(x)
in ::[GR_TUNINGS]
where x.[ CODE] like grt.[ CODE]||'_'||P_FILIAL.[ CODE]
      or x.[ CODE] = grt.[ CODE]||P_FILIAL.[ CODE]
into tmpGrTuning;

Вариант 1 (PL\SQL)
Код:
declare
   plp$2$2   VARCHAR2(3);
   plp$2$1   VARCHAR2(250);
begin
   plp$2$1 := Z#GR_TUNINGS#INTERFACE.get_str(GRT,'CODE');
   plp$2$2 := Z#BRANCH#INTERFACE.get_str(P_FILIAL,'CODE');
   select  a1.ID
   into TMPGRTUNING
   from Z#GR_TUNINGS a1
   where a1.C_CODE like plp$2$1||'_'||plp$2$2 or a1.C_CODE = plp$2$1||plp$2$2;
exception
   when NO_DATA_FOUND then raise rtl.NO_DATA_FOUND;
   when TOO_MANY_ROWS then raise rtl.TOO_MANY_ROWS;
end;

Вариант 2 (PL\PLUS)
Код:
locate tmpGrTuning
in ::[GR_TUNINGS]
where tmpGrTuning.[ CODE] like grt.[ CODE]||'_'||P_FILIAL.[ CODE]
      or tmpGrTuning.[ CODE] = grt.[ CODE]||P_FILIAL.[ CODE];

Вариант 3 (PL\PLUS)
Код:
tmpGrTuning := ::[GR_TUNINGS]%locate(x where x.[ CODE] like grt.[ CODE]||'_'||P_FILIAL.[ CODE]);

Вариант 2 и 3 (PL\SQL)
Код:
declare
   plp$3$2   VARCHAR2(3);
   plp$3$1   VARCHAR2(250);
   cursor c_obj is
      select  a1.id
      from Z#GR_TUNINGS a1
      where a1.C_CODE like plp$3$1||'_'||plp$3$2 or a1.C_CODE = plp$3$1||plp$3$2;
begin
   plp$3$1 := Z#GR_TUNINGS#INTERFACE.get_str(GRT,'CODE');
   plp$3$2 := Z#BRANCH#INTERFACE.get_str(P_FILIAL,'CODE');
   TMPGRTUNING := NULL;
   for plp$c_obj in c_obj loop
      TMPGRTUNING := plp$c_obj.id; exit;
   end loop;
   if TMPGRTUNING is NULL then raise rtl.NO_DATA_FOUND; end if;
end;

Как Вы успели заметить Вариант 1, 2 и 3 на PL\PLUS имеют одинаковую смысловую нагрузку, но глядя на то, как этот код транслируется в PL\SQL видим что в Варианте 1 мы получим TOO_MANY_ROWS, а в Варианте 2 и 3 получим первую попавшую в выборку запись.
_________________
I Lie About Everything.
ГлСП
Профи


Вступление в Клуб: 20.09.2007
СообщениеПт Мар 26, 2010 09:23    Ответить с цитатой
Полезность: Нет оценки
а вот так не пробовали?

Код:
[AC_FIN]%locate(u exact Where


Это не грабли, это матчасть, мать наша.


Последний раз редактировалось: ГлСП (Пт Мар 26, 2010 12:38), всего редактировалось 1 раз
w00per
Профи


Вступление в Клуб: 17.10.2007
СообщениеПт Мар 26, 2010 10:00    Ответить с цитатой
Полезность: Нет оценки
ГлСП пишет:
а вот так не пробовал?

Код:
[AC_FIN]%locate(u exact Where


Это не грабли, это матчасть, мать наша.

Конечно пробовал.
Вы внимательно читали предисторию появления этой темы? Пост смотрели? Чувствуете разницу м/у "сам наступАл" и "сам наступИл"?
Если я описал не все возможные варианты, то уж простите великодушно.
_________________
I Lie About Everything.
ГлСП
Профи


Вступление в Клуб: 20.09.2007
СообщениеПт Мар 26, 2010 12:37    Ответить с цитатой
Полезность: Нет оценки
w00per пишет:
ГлСП пишет:
а вот так не пробовал?

Код:
[AC_FIN]%locate(u exact Where


Это не грабли, это матчасть, мать наша.

Конечно пробовал.
Вы внимательно читали предисторию появления этой темы? Пост смотрели? Чувствуете разницу м/у "сам наступАл" и "сам наступИл"?
Если я описал не все возможные варианты, то уж простите великодушно.



Читал, но не нашел описания того, как избегать "граблей" с locate.
Вы уж тогда добавьте про exaсt в свой пост.
w00per
Профи


Вступление в Клуб: 17.10.2007
СообщениеПт Мар 26, 2010 12:54    Ответить с цитатой
Полезность: Нет оценки
ГлСП пишет:
Вы уж тогда добавьте про exaсt в свой пост.

Зачем, Вы же уже написали?! Форум - творчество коллективное. Хотел Вам даже полезность поставить за конструктивное дополнение, но не стал (за намеки). Laughing
_________________
I Lie About Everything.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru