Предупреждения компилятора. Как отключить PLP-ID_SUBSTITUTE?
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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](images/smiles/icon_smile.gif) |
|
![](templates/subSilver/images/spacer.gif) |
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](images/smiles/icon_smile.gif) |
А зачем вы это используете?
Насколько я знаю, без конструкций типа VID_DEBT([CODE]='Бла-бла') жить гораздо удобней.
А то заведёт какая-нить зараза две записи с одним и тем же кодом...
PS: warnings не отключаются.
хотя могу предложить вариант извращения. |
|
![](templates/subSilver/images/spacer.gif) |
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...)
|
Понятно, что читаемость хуже. Мягко говоря. Если таких переменных будет не одна а с десяток, то ошибиться в них "как два байта переслать". А "если заведет какая-нибудь зараза две записи с одним кодом", то все так же сломается... И все ради чего? |
|
![](templates/subSilver/images/spacer.gif) |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пн Авг 10, 2015 07:05   |
|
Полезность: Нет оценки
|
KhrushchevAV пишет: | Цитата: | PS: warnings не отключаются.
|
Это печально! Но, спасибо за ответ.
А смысл в этом ворнинге Вы видите? |
Не-а
Лично я был бы только за то, чтобы организовать уровни предупреждений, как в php. Или, ещё лучше, иметь возможность отключать по типам.
KhrushchevAV пишет: | Цитата: | хотя могу предложить вариант извращения.
|
Если Вас не затруднит. Вдруг, окажется полезным... |
При перекомпиляции меняется состояние у записи в methods. Можно сделать триггер на таблицу methods, удаляющий предупреждения заданного типа из таблицы errors у указанного метода для конкретного пользователя (на всякий случай). |
|
![](templates/subSilver/images/spacer.gif) |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пн Авг 10, 2015 17:16  Re: Предупреждения компилятора. Как отключить PLP-ID_SUBSTIT |
|
Полезность: Нет оценки
|
Random пишет: | Насколько я знаю, без конструкций типа VID_DEBT([CODE]='Бла-бла') жить гораздо удобней.
А то заведёт какая-нить зараза две записи с одним и тем же кодом...
|
нормальная конструкция.
1)То , что "заведет зараза две записи" регулируется обычно правами, но с другой стороны, лучше сразу отловить факт заведения , хотя бы и взрывом кода , зато не получить логической ошибки.
2) можно уточнить выбор, ([CODE]='Бла-бла' AND [TYPE]='ha-ha' ) |
|
![](templates/subSilver/images/spacer.gif) |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Вт Авг 11, 2015 07:20  Re: Предупреждения компилятора. Как отключить PLP-ID_SUBSTIT |
|
Полезность: Нет оценки
|
vtar пишет: | 1)То , что "заведет зараза две записи" регулируется обычно правами, но с другой стороны, лучше сразу отловить факт заведения , хотя бы и взрывом кода , зато не получить логической ошибки. |
А ещё лучше тупо добавить уникальный индекс.
Но на каждое условие индексов не наставишься.
И вот если у тебя две записи, конструкция [ТИП](условие) вовсе не взрывается. Она берёт какую-то запись. И получается такая скрытая подстава, что вроде всё хорошо, а работает криво.
Или кто-то запись удалил, новую сделал, а операцию не перекомпилировал. В справочнике значение есть, а работать нельзя. Но тут хотя бы исключение будет при работе.
Так что лучше делайте переменные и select into.
Пусть действительно взрывается. |
|
![](templates/subSilver/images/spacer.gif) |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 11, 2015 10:01   |
|
Полезность: Нет оценки
|
Конструкция ([CODE]='Бла-бла') компилируется в пакете к конкретный ID. Поэтому заводить вторую запись или удалить текущую ни чего не мешает. При удалении это рванет сразу, как только запись понадобится. А по двойной записи это скрытый косяк. Сразу не всегда и найдешь. _________________ всегда есть как минимум 2 выхода |
|
![](templates/subSilver/images/spacer.gif) |
Alex294 Участник со стажем
Вступление в Клуб: 02.06.2013
|
Вт Авг 11, 2015 10:57   |
|
Полезность: 1
|
Alexsey пишет: | Конструкция ([CODE]='Бла-бла') компилируется в пакете к конкретный ID. Поэтому заводить вторую запись или удалить текущую ни чего не мешает. При удалении это рванет сразу, как только запись понадобится. А по двойной записи это скрытый косяк. Сразу не всегда и найдешь. |
Снимите галку "Вычисления на этапе компиляции\значений ссылок в конструкции поиска" и будет компилироваться в select ... into. |
|
![](templates/subSilver/images/spacer.gif) |
KhrushchevAV Участник со стажем
Вступление в Клуб: 17.10.2014
|
Вт Авг 11, 2015 13:46   |
|
Полезность: Нет оценки
|
Цитата: | Снимите галку "Вычисления на этапе компиляции\значений ссылок в конструкции поиска" и будет компилироваться в select ... into. |
Во! Спасибо за совет!
При снятии этой галочки галочки warning PLP-ID_SUBSTITUTE пропадает.
Код в pl/sql разворачивается вместо просто ID, в select a1.id into plp$ID_1.
Лишний курсор, конечно... Но если не где-нибудь во вложенных циклах, то, наверное не очень большое зло. |
|
![](templates/subSilver/images/spacer.gif) |
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] = 'УКАЖИТЕ КОД А ПОТОМ УДАЛИТЕ ЗАПИСЬ В СПРАВОЧНИКЕ')
, ...
)
|
не рванёт, но и данные выдаст косячные. |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|