|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Новичок в SQL, сейчас работаю с Ораклом 11. Возник вопрос, как у осторожных программистов принято обрабатывать явно ошибочные параметры переданные в квери, или другие аварийные ситуации? Ведь не всегда можно пригладить параметр через nvl() и продолжить, иногда что-то настолько наперекосяк, что желательно не пытаться создать рекорд сет, а выкинуть исключение, пусть выше обрабатывают. В знакомых мне процедурных языках программирования это решается легко, например вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
А в SQL или это не актуально, или я не знаю трюк как это сделать красиво, не портя слишком читабельность основной квери. Если кто-то проверяет параметры на вшивость на языке SQL, как вы это делаете? Хочется обойтись без добавления PL/SQL блока begin/end, и обработать проверку параметров в одном месте, а не разбросать по всей странице. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:05 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQLВедь не всегда можно пригладить параметр через nvl() и продолжить, иногда что-то настолько наперекосяк, что желательно не пытаться создать рекорд сет, а выкинуть исключение, пусть выше обрабатывают. Ну так и выкидывай исключение, в чём проблема-то? А аффтар приложения, который не провалидировал значения перед скармливанием их серверу пусть сам с этим разбирается. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:23 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQL, Валидацию совпадения типов данных вызываемых процедур/полей таблиц вам всё равно придётся делать на клиенте. Правильность значений, при правильном типе данных, в любом случае описывается вашей бизнес-логикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:43 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
не знаю, как это сделать. на псевдоязыке это было бы Код: plaintext 1. 2. 3. 4. 5.
Поэтому спрашиваю у знатоков, которые или такую проблему уже давно решили, или могут легко решить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:44 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
env Валидацию совпадения типов данных вызываемых процедур/полей таблиц вам всё равно придётся делать на клиенте. Правильность значений, при правильном типе данных, в любом случае описывается вашей бизнес-логикой. "Не делай этого в SQL" это конечно ответ, но это не решение. В простых случаях (один программист, отсутствие подчиненных квери, отсутствие middleware) за этим можно проследить. Кто-то апгрейднул верхнюю квери - моя подчиненная квери перестала получать необходимые параметры. Я предпочитаю чтоб моя квери сбойнула сразу не увидев присутствия параметров, а не ждала полного цикла тестов (или хуже, жалобы клиента). Есть конечно принцип GIGO - мусор пришел, мусор вышел. Пусть клиент догадывается, таблица пустая потому что данных нет, или потому что внутренняя ошибка случилась, или может кто-то полномочия подкрутил не туда. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:56 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQLА как такое в SQL написать? В SQL - никак. Garbage in - garbage out. А какую реальную проблем ты пытаешься решить-то?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:01 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov НеофитSQLА как такое в SQL написать? В SQL - никак. Garbage in - garbage out. А какую реальную проблем ты пытаешься решить-то?.. >> Я предпочитаю чтоб моя квери сбойнула сразу не увидев присутствия параметров, а не ждала полного цикла тестов (или хуже, жалобы клиента). Возможно, я переношу подходы из другого мира, где к процедуре сразу пишут юнит-тест и добавляют его в мейк на случай когда кто-то неудачно поковыряется в коде, его код даже в сорс контрол не появится - автотест сразу бьет по рукам, высылает имейл с результатами проваленного теста. Но это было в тех местах, где пишут код так, чтоб к нему не возвращаться. Наверное в SQL подход более "агильный", где это все не нужно, просто ожидается что постоянно что-то будет ломаться/чиниться понемножку без всякой инструментации, историй изменений или автоматических тестов. Пока еще не разобрался. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:17 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Для начала разберись: процедура у тебя или запрос. Это две большие разницы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:24 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, запрос конечно. это видно из заголовка, начального вопроса и контекста. А как вы поступаете, когда запрос работал, а потом что-то вне запроса сломалось и запрос перестал работать? Или вы единственный программист, и вопрос ответственности неактуален? Интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:35 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQL А как вы поступаете, когда запрос работал, а потом что-то вне запроса сломалось и запрос перестал работать? Забастовку объявил? Ушёл в нирвану? Выдал слишком много данных? Выдал слишком мало данных? Вообще ничего не выдал? Выдал что-то, похожее на лажу? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:43 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Ну или банальный вариант: пользователь/оператор просто не ввел нужных данных в базу ))) - запрос не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:49 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQL, SQL не процедурный язык, это декларативное определение способа извлечения данных. Считайте, что у вас есть код пример вызова метода закрытой библиотеки. Что вы передадите на вход - внутри и в самом вызове вы не проверите. Любая проверка параметров подобного вызова должна быть снаружи. Внутри запроса на SQL вы можете задать логику интерпретации отсутствующих значений, либо получить явные ошибки конвертации типов. При этом успешные неявные конвертации даже вернут результат, но не тот, что вы ожидаете. Например Код: plsql 1.
, где :d передаётся строкой '10122010' и в зависимости от NLS либо совпадёт с одной из дат, либо не совпадёт ни с одной (20.10.1012) либо вообще упадёт на преобразовании из строки в дату при сравнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:50 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Basil A. Sidorov НеофитSQL А как вы поступаете, когда запрос работал, а потом что-то вне запроса сломалось и запрос перестал работать? Забастовку объявил? Ушёл в нирвану? Выдал слишком много данных? Выдал слишком мало данных? Вообще ничего не выдал? Выдал что-то, похожее на лажу? Может по-разному сбойнуть. К перечисленным вариантам: - запустил мусор дальше в систему, где осторожный программист поймал мусор и выдал ошибку с указанием на мою процедуру - создал рекордсет, на основании которого неверно совершились важные действия (напр, денежный перевод или удаление данных) - показал на экране правдоподобный, но неправдивый отчет по продажам. И комиссиям. и премиям. И налогам. - переправил мусор в парсер, который крэшнулся (если моя квери исполняется при старте, перезапуск снова крэшнется. В знакомых мне процедурных языках программирования этот вопрос не ставится после 1990го. Огромные ресурсы тратятся на проверку системы, в том числе коммерческие системы типа BoundsChecker, Fortify, и т.д. Самый простой и первый способ для программиста работающего в команде не стать козлом (отпущения), который не вылазит из дебагера, это тщательно проверять параметры на вшивость. Код, работающий по принципу garbage in - garbage out считается непригодным для коммерческого использования. Но это в другом мире драйверов и покупного софта. Я постепенно привыкаю, что тут по-другому. Пока решил эту проблему двумя способами, попутно нашел серьезный баг в Оракле 11. Проконсультируюсь с коллегой, если решение годное, опубликую здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 17:36 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQLКод, работающий по принципу garbage in - garbage out считается непригодным для коммерческого использования. То есть абсолютно всё шифрование, включая RSA и AES не может быть использовано в коммерческом софте. Интересная новость... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 18:00 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov НеофитSQLКод, работающий по принципу garbage in - garbage out считается непригодным для коммерческого использования. То есть абсолютно всё шифрование, включая RSA и AES не может быть использовано в коммерческом софте. Интересная новость... Рассуждение странное и ошибочное, учитывая что у крипто API есть около полусотни кодов ошибок. Тут можно посмотреть для винды: https://docs.microsoft.com/en-us/windows/win32/seccrypto/capicom-error-code Среди них полно кодов ошибок параметров, напр. - CAPICOM_E_STORE_EMPTY - CAPICOM_E_ATTRIBUTE_INVALID_NAME - CAPICOM_E_INVALID_KEY_LENGTH ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 19:16 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQLРассуждение странное и ошибочное, учитывая что у крипто API есть около полусотни кодов ошибок. Чтобы оно перестало быть странным достаточно изучить непосредственно алгоритмы, а не библиотеку вокруг них. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 20:09 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Решение, которое мне показалось наиболее читабельным. Протестировал - исключение происходит при невыполнении любого из условий. В данном случае, условия ограничивают сроки работы квери с 2020 по 2036 год. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:19 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
Кроме логики, производительности, есть еще читаемость и сопровождаемость. Я бы не хотел после вас сопровождать код. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 06:17 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
если хочется обработку ораклом делать то ХП ну или можно квери в бегин-енд пихать Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 10:08 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
НеофитSQL В данном случае, условия ограничивают Т.е. проще говоря, внесли бизнес-логику проверки значений в статичный запрос без параметров. А теперь протестируйте ваше решение на запросе с параметрами и передайте число вместо даты, например. Как уже было сказано, логику интерпретации значений параметров можно зашить в запрос. Но это не защитит его от ошибок конвертации типов или от разной интерпретации значений в зависимости от окружения, если типы оказались конвертируемыми успешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 11:10 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
env 1. Но это не защитит его от ошибок конвертации типов 2. или от разной интерпретации значений в зависимости от окружения, если типы оказались конвертируемыми успешно. а второе это ужасно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 11:46 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
andreymx, У ТС же боль в том, чтобы НеофитSQL не стать козлом (отпущения) При этом человек наивно ожидает от декларативного языка возможностей и функционала процедурного. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 12:48 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
авторТ.е. проще говоря, внесли бизнес-логику проверки значений в статичный запрос без параметров. А теперь протестируйте ваше решение на запросе с параметрами и передайте число вместо даты, например. Спасибо,у меня код так и делает - проверяет что объект-параметр существует, и правильного типа. Дату использовал в качестве примера для форума. Как уже было сказано, логику интерпретации значений параметров можно зашить в запрос. Но это не защитит его от ошибок конвертации типов или от разной интерпретации значений в зависимости от окружения, если типы оказались конвертируемыми успешно. Тут я не совсем понял что вы хотели сказать. Проверка параметров защищает только от плохих параметров. Она не защищает от собственных ошибок в другом месте, поломок дисков или пропажи электропитания, т.к. это не входит в задачу проверок параметров. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:54 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
andreymx если хочется обработку ораклом делать то ХП Извините, не знаком с термином ХП. что это? andreymx ну или можно квери в бегин-енд пихать конечно, если клиент понимает тип курсор Верно, это был первый порыв, т.к. привычно. Но клиент не понимает курсор, и также хочется эффективно научиться пользоваться новым для меня языком, не уподобляясь тем, кто пишет на всех языках как на бейсике. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:03 |
|
Проверка/обработка правильности параметров в SQL квери
|
|||
---|---|---|---|
#18+
dmdmdm Кроме логики, производительности, есть еще читаемость и сопровождаемость. Я бы не хотел после вас сопровождать код. Экспертами не рождаются, экспертами становятся (и то не все). Мне бы хотелось чтобы мой код был максимально читаемым и сопровождаемым. По этой причине я пишу комментарии, не увлекаюсь вложенными подзапросами, даю переменным описательные названия. Наверное есть и другие полезные методы - поделитесь если знаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:09 |
|
|
start [/forum/topic.php?fid=52&fpage=37&tid=1880906]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 428ms |
0 / 0 |