«Грабли» на которые легко наступить!
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 в свой пост. |
Зачем, Вы же уже написали?! Форум - творчество коллективное. Хотел Вам даже полезность поставить за конструктивное дополнение, но не стал (за намеки).  _________________ I Lie About Everything. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|