и посмотреть медиа
Data analysis - DA SQL
и посмотреть медиа
Data analysis: SQL, Python.
Data analysis: SQL, Python.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
About data analysis: databases, SQL, Python and more for analysts.
CURSOR в SQL Ранее были упомянуты курсоры в SQL. Что это такое? Курсор — это инструмент, который позволяет обрабатывать результаты запроса построчно, а не сразу всем набором. То есть если обычный селект возвращает нам сразу много строк из таблицы, то тот же самый селект, упакованный в курсор, будет возвращать нам каждую строку по отдельности. Курсор обычно используется в наборе с переменными (куда сохраняется результат) и с циклами (которые перебирают каждую строку). В общем, на практике это выглядит как-то так: DECLARE -- Объявляем курсор CURSOR emp_cursor IS SELECT COUNTRY_id FROM hr.COUNTRIES where region_id = 20; -- переменная для хранения v_name hr.COUNTRIES.COUNTRY_id%TYPE; BEGIN -- Открываем курсор OPEN emp_cursor; -- Запускаем цикл LOOP -- Выбираем данные в переменную FETCH emp_cursor INTO v_name; -- Выходим из цикла, если данных больше нет EXIT WHEN emp_cursor%NOTFOUND; -- Выводим DBMS_OUTPUT.PUT_LINE('Код страны: ' || v_name); -- Выходим из цикла END LOOP; -- Закрываем курсор CLOSE emp_cursor; END; Формат вывода будет следующим (точные данные зависят от таблицы): Код страны: AR Код страны: BR Код страны: CA Код страны: MX Код страны: US 🟠Зачем это нужно? Курсоры часто применяются в процедурах и функциях. Например, у нас написана процедура, которая в качестве входного параметра (IN) принимает значения COUNTRY_id (из приведенного выше примера). И нам нужно в нее передавать значения COUNTRY_id, где region_id = 20. Без курсора и цикла мы бы, как вариант, сначала написали запрос, чтоб получить список COUNTRY_id: SELECT COUNTRY_id FROM hr.COUNTRIES where region_id = 20 а затем вручную передавали бы по очереди эти значения в процедуру: BEGIN PROCEDURE_NAME('AR'); END; С курсором и циклом все было бы иначе: CREATE OR REPLACE PROCEDURE PROCEDURE_NAME(p_region_id IN NUMBER) IS CURSOR emp_cursor IS SELECT COUNTRY_id FROM hr.COUNTRIES where region_id = p_region_id; и дальше прописывается какая-нибудь логика процедуры Мы бы создали процедуру, где входной параметр p_region_id использовался бы в where region_id = p_region_id. Вызывалась бы такая процедура так: BEGIN PROCEDURE_NAME(20); END; P.S. Курсоры, конечно, могут применяться и для других задач, но наиболее часто они встречаются в процедурах и функциях. Вне их контекста курсоры практически всегда можно заменить самыми обычными операциями, которые нам привычнее и, самое главное, быстрее построчной обработки.
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!