Comments 13
используйте habracut
-3
Забавно. Прямо сейчас прохожу курс про использование курсоров в PL/SQL, отвлёкся на хабр, а тут бац — и та же тема :)
+2
Спасибо, полезная информация. Впрочем, не могу не отметить, что в mysql такие вещи все же как-то выглядят немного недоделанными: вот pl/pgsql, например, аналогичные вещи можно вполне спокойно делать, не беспокоясь об SQLSTATE.
+1
Если брать тот же Oracle, то там и конструкция обхода не через While, а через For, при этом каждое поле не в отдельную переменную читается, а является объектом строки(записи). Конечно это удобней и продуманней, но как есть так есть, и придется с этим смириться.
+1
В interbase/firebird курсоры тоже используются через for. Проще, удобнее. Нет такого жуткого нагромождения объявлений.
PS
У хранимых процедур появился серьезный враг — «Кроссбазаданные» фрефмворки типа SQLAlchemy (Python), ActiveRecord (Ruby) которые потихонечку сводят на нет необходимость знания тонкостей построения запросов.
PS
У хранимых процедур появился серьезный враг — «Кроссбазаданные» фрефмворки типа SQLAlchemy (Python), ActiveRecord (Ruby) которые потихонечку сводят на нет необходимость знания тонкостей построения запросов.
0
Эти фрэйворки абсолютно не грозят процедурам, т.к. скорость выполнения обычных запросов все равно останется ниже выполнения аналогичной процедуры на время компиляции запроса.
К тому же, использование подобных фрэйворков начинающим программистам только вредит, т.к. приводит к тому, что без них с базой не могут потом работать!
К тому же, использование подобных фрэйворков начинающим программистам только вредит, т.к. приводит к тому, что без них с базой не могут потом работать!
0
Кому как, а мне наоборот понравилось больше сделать некоторую базовую логику в виде хранимых процедур, при этом их можно максимально оптимизировать, что нельзя сказать о генерируемых запросах фреймворками. А нагромождение не пугает если код хорошо форматирован.
0
Поправьте текст «Это го можно избежать»
+1
Скорее всего это уже не актуально в статье шестилетней давности, но не надо ли проверять done после FETCH, а не внутри WHILE?
Если селект нашёл одну строку, while успешно сработает, фетч получит данные, done не изменится, тело цикла отработает и запустится вторая итерация, while снова сработает, фетч ничего не найдёт, изменит done на 1, но цикл не прервётся и переменные со значениями прошлой итерации попадут ниже в логику тела цикла повторно.
Если селект нашёл одну строку, while успешно сработает, фетч получит данные, done не изменится, тело цикла отработает и запустится вторая итерация, while снова сработает, фетч ничего не найдёт, изменит done на 1, но цикл не прервётся и переменные со значениями прошлой итерации попадут ниже в логику тела цикла повторно.
0
Sign up to leave a comment.
Курсоры в Mysql.