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

Предупреждения компилятора. Как отключить PLP-ID_SUBSTITUTE?

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


Вступление в Клуб: 17.10.2014
СообщениеПт Авг 07, 2015 09:05   Предупреждения компилятора. Как отключить PLP-ID_SUBSTITUTE? Ответить с цитатой
Полезность: Нет оценки
Добрый день, коллеги.

В очередной раз потратил больше часа на поиск ошибки, о которой предупреждал компилятор. В очередной раз вспомнил, что гуру программирования рекомендуют просматривать все "ворнинги". А почему мы их не просматриваем? Да потому что их слишком много, и большинство из них бесполезны. А смотреть надо в окне из нескольких строк (и это не настраивается).

Например.
Написал в коде:
[code]::[VID_DEBT]([code] = 'ПРЦ_КРЕД_112')[/code]
Получил предупреждение
Цитата:
PLP-ID_SUBSTITUTE: VID_DEBT Найден экземпляр [1984128], удовлетворяющий заданным условиям


Знакомо? Все вроде хорошо. Но. Зачем мне предупреждение, что найден экземпляр?! Вот если бы не найден, то да. А так... Бессмысленное предупреждение, которое занимает 1 строку.

Может кто подскажет, как отключить именно PLP-ID_SUBSTITUTE?
Тогда можно было бы внимательнее смотреть на остальные warnings.

Или может я чего-то недопонимаю и это
Цитата:
PLP-ID_SUBSTITUTE: VID_DEBT Найден экземпляр [1984128], удовлетворяющий заданным условиям
имеет глубокий смысл? Настолько, что полезно на него каждый раз смотреть? Типа "О! Класс, экземпляр все еще не пропал, как и 20 лет назад. Перейдем к следующему предупреждению" Smile
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПт Авг 07, 2015 10:12   Re: Предупреждения компилятора. Как отключить PLP-ID_SUBSTIT Ответить с цитатой
Полезность: 1
KhrushchevAV пишет:
Добрый день, коллеги.

В очередной раз потратил больше часа на поиск ошибки, о которой предупреждал компилятор. В очередной раз вспомнил, что гуру программирования рекомендуют просматривать все "ворнинги". А почему мы их не просматриваем? Да потому что их слишком много, и большинство из них бесполезны. А смотреть надо в окне из нескольких строк (и это не настраивается).

Например.
Написал в коде:
[code]::[VID_DEBT]([code] = 'ПРЦ_КРЕД_112')[/code]
Получил предупреждение
Цитата:
PLP-ID_SUBSTITUTE: VID_DEBT Найден экземпляр [1984128], удовлетворяющий заданным условиям


Знакомо? Все вроде хорошо. Но. Зачем мне предупреждение, что найден экземпляр?! Вот если бы не найден, то да. А так... Бессмысленное предупреждение, которое занимает 1 строку.

Может кто подскажет, как отключить именно PLP-ID_SUBSTITUTE?
Тогда можно было бы внимательнее смотреть на остальные warnings.

Или может я чего-то недопонимаю и это
Цитата:
PLP-ID_SUBSTITUTE: VID_DEBT Найден экземпляр [1984128], удовлетворяющий заданным условиям
имеет глубокий смысл? Настолько, что полезно на него каждый раз смотреть? Типа "О! Класс, экземпляр все еще не пропал, как и 20 лет назад. Перейдем к следующему предупреждению" Smile


А зачем вы это используете?
Насколько я знаю, без конструкций типа VID_DEBT([CODE]='Бла-бла') жить гораздо удобней.
А то заведёт какая-нить зараза две записи с одним и тем же кодом...

PS: warnings не отключаются.
хотя могу предложить вариант извращения.
KhrushchevAV
Участник со стажем


Вступление в Клуб: 17.10.2014
СообщениеПт Авг 07, 2015 13:22    Ответить с цитатой
Полезность: Нет оценки
Цитата:
PS: warnings не отключаются.

Это печально! Но, спасибо за ответ.

А смысл в этом ворнинге Вы видите?

Цитата:
хотя могу предложить вариант извращения.


Если Вас не затруднит. Вдруг, окажется полезным...


Цитата:
А зачем вы это используете?
Насколько я знаю, без конструкций типа VID_DEBT([КОД]='Бла-бла') жить гораздо удобней.
А то заведёт какая-нить зараза две записи с одним и тем же кодом...


Здравая мысль. Тоже об этом думал. Под лозунгом: "Наверняка ведь умные люди компилятор писали. Раз ворнинг, значит не надо так писать, По идее.". Пробовал...

Тут есть два но.

1) Есть существующий код. Часто не свой. Там таких конструкций много. И просмотр ворнингов по твоему кусочку кода превращается в муку. В результате не смотрим на них совсем.

2) Лаконичность и понятность кода. Надо мне вызвать функцию, которая принимает параметром вид задолженности. Прямо в вызове функции ставишь
Код:
::[VID_DEBT]([КОД] = 'ПРЦ_КРЕД_112')

и все отлично. Коротко и ясно. Причем не только автору.
Альтернатива же не так изящна (на мой взгляд).

Код:

--Объявить, где-то переменную (не константу).
VidDebtProc112 ref [VID_DEBT];
--где-то присвоить ей значение
locate VidDebtProc112 in ::[VID_DEBT] where VidDebtProc112.[КОД]='ПРЦ_КРЕД_112';
-- по хорошему, обработать исключения
...
-- в вызов нашей фн-ии подставить эту переменную
Get_Sum_Debt(...VidDebtProc112...)


Понятно, что читаемость хуже. Мягко говоря. Если таких переменных будет не одна а с десяток, то ошибиться в них "как два байта переслать". А "если заведет какая-нибудь зараза две записи с одним кодом", то все так же сломается... И все ради чего?
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеПн Авг 10, 2015 07:05    Ответить с цитатой
Полезность: Нет оценки
KhrushchevAV пишет:
Цитата:
PS: warnings не отключаются.

Это печально! Но, спасибо за ответ.

А смысл в этом ворнинге Вы видите?

Не-а Smile
Лично я был бы только за то, чтобы организовать уровни предупреждений, как в php. Или, ещё лучше, иметь возможность отключать по типам.

KhrushchevAV пишет:
Цитата:
хотя могу предложить вариант извращения.


Если Вас не затруднит. Вдруг, окажется полезным...

При перекомпиляции меняется состояние у записи в methods. Можно сделать триггер на таблицу methods, удаляющий предупреждения заданного типа из таблицы errors у указанного метода для конкретного пользователя (на всякий случай).
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПн Авг 10, 2015 17:16   Re: Предупреждения компилятора. Как отключить PLP-ID_SUBSTIT Ответить с цитатой
Полезность: Нет оценки
Random пишет:
Насколько я знаю, без конструкций типа VID_DEBT([CODE]='Бла-бла') жить гораздо удобней.
А то заведёт какая-нить зараза две записи с одним и тем же кодом...

нормальная конструкция.
1)То , что "заведет зараза две записи" регулируется обычно правами, но с другой стороны, лучше сразу отловить факт заведения , хотя бы и взрывом кода , зато не получить логической ошибки.
2) можно уточнить выбор, ([CODE]='Бла-бла' AND [TYPE]='ha-ha' )
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеВт Авг 11, 2015 07:20   Re: Предупреждения компилятора. Как отключить PLP-ID_SUBSTIT Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
1)То , что "заведет зараза две записи" регулируется обычно правами, но с другой стороны, лучше сразу отловить факт заведения , хотя бы и взрывом кода , зато не получить логической ошибки.


А ещё лучше тупо добавить уникальный индекс.
Но на каждое условие индексов не наставишься.
И вот если у тебя две записи, конструкция [ТИП](условие) вовсе не взрывается. Она берёт какую-то запись. И получается такая скрытая подстава, что вроде всё хорошо, а работает криво.

Или кто-то запись удалил, новую сделал, а операцию не перекомпилировал. В справочнике значение есть, а работать нельзя. Но тут хотя бы исключение будет при работе.

Так что лучше делайте переменные и select into.
Пусть действительно взрывается.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Авг 11, 2015 10:01    Ответить с цитатой
Полезность: Нет оценки
Конструкция ([CODE]='Бла-бла') компилируется в пакете к конкретный ID. Поэтому заводить вторую запись или удалить текущую ни чего не мешает. При удалении это рванет сразу, как только запись понадобится. А по двойной записи это скрытый косяк. Сразу не всегда и найдешь.
_________________
всегда есть как минимум 2 выхода
Alex294
Участник со стажем


Вступление в Клуб: 02.06.2013
СообщениеВт Авг 11, 2015 10:57    Ответить с цитатой
Полезность: 1
Alexsey пишет:
Конструкция ([CODE]='Бла-бла') компилируется в пакете к конкретный ID. Поэтому заводить вторую запись или удалить текущую ни чего не мешает. При удалении это рванет сразу, как только запись понадобится. А по двойной записи это скрытый косяк. Сразу не всегда и найдешь.

Снимите галку "Вычисления на этапе компиляции\значений ссылок в конструкции поиска" и будет компилироваться в select ... into.
KhrushchevAV
Участник со стажем


Вступление в Клуб: 17.10.2014
СообщениеВт Авг 11, 2015 13:46    Ответить с цитатой
Полезность: Нет оценки
Цитата:
Снимите галку "Вычисления на этапе компиляции\значений ссылок в конструкции поиска" и будет компилироваться в select ... into.


Во! Спасибо за совет!
При снятии этой галочки галочки warning PLP-ID_SUBSTITUTE пропадает.

Код в pl/sql разворачивается вместо просто ID, в select a1.id into plp$ID_1.
Лишний курсор, конечно... Но если не где-нибудь во вложенных циклах, то, наверное не очень большое зло.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Авг 12, 2015 09:03    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
Конструкция ([ CODE]='Бла-бла') компилируется в пакете к конкретный ID. Поэтому заводить вторую запись или удалить текущую ни чего не мешает. При удалении это рванет сразу, как только запись понадобится. А по двойной записи это скрытый косяк. Сразу не всегда и найдешь.


Код:

select x(x) in ::[PR_CRED] where x.[LIST_PAY].[OPER] in (
   ::[VID_OPER_DOG]([ CODE] = 'УКАЖИТЕ КОД А ПОТОМ УДАЛИТЕ ЗАПИСЬ В СПРАВОЧНИКЕ')
,   ...
)

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

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