Database
 sql >> база данни >  >> RDS >> Database

Как да използвате клауза за групово събиране на PL/SQL с изявление FETCH INTO

Клауза за групово събиране с изявление FETCH INTO

В предишния урок успяхме да компресираме множество превключватели на контекст в един, като използвахме PL/SQL Bulk Collect с оператор SELECT-INTO. Инструкцията SELECT-INTO е стандартна SQL заявка, което означава, че разработчикът няма голям контрол върху изпълнението на израза.

Ако говорим за производителност на заявката, не можем да надхвърлим екстент с израза SELECT-INTO. Нека видим как можем да преодолеем всички тези недостатъци на оператора SELECT-INTO.

В този блог ще научите как да използвате клауза Bulk Collect с израз FETCH-INTO на изричен курсор. Тъй като операторите FETCH са част от жизнения цикъл на курсора, така че за по-доброто разбиране на този урок са необходими работни познания за изричния курсор. За същото можете да разгледате урока как да създадете изричен курсор в базата данни на Oracle.

Защо трябва да използваме клауза за групово събиране с оператор FETCH INTO?

Както беше споменато в предишния блог, когато използваме Bulk-Collect с израза SELECT-INTO, машината за изпълнение използва имплицитен курсор за обработка на задачата. Но ако използваме Bulk Collect с израза FETCH-INTO, тогава машината по време на изпълнение ще използва изричния курсор, за да обработи задачата.

Изричният курсор винаги ни помага да получим предварителен контрол върху нашите стандартни SQL заявки. Например с изричен курсор можем да контролираме кога да извлечем записите или колко записа искаме да извлечем наведнъж, но това не е възможно в случай на оператор SELECT-INTO.

Какъв е синтаксисът на израза за групово събиране с извличане?

Подобно на израза SELECT-INTO, клаузата за групово събиране работи като атрибут на оператора FETCH-INTO. Ето синтаксиса

FETCH <cursor_name> BULK COLLECT INTO <plsql_collection>;

Изявленията FETCH са част от изричния курсор. Ако се опитате да ги изпълните без да декларирате родителския им курсор, ще получите грешка. Също така винаги помнете, че PL/SQL колекциите са единствената поддържана структура за групово събиране.

Пример:Как да използвате PL/SQL групово събиране с израз FETCH-INTO в Oracle Database.

SET SERVEROUTPUT ON;
DECLARE
--Create an explicit cursor
    CURSOR exp_cur IS
    SELECT first_name FROM employees;

    --Declare collection for holding the data 
    TYPE nt_fName   IS TABLE OF VARCHAR2 (20);
    fname   nt_fName;
BEGIN
    OPEN exp_cur;
    LOOP
        FETCH exp_cur BULK COLLECT INTO fname;
        EXIT WHEN fname.count=0;
        --Print data
        FOR idx IN fname.FIRST.. fname.LAST
        LOOP
            DBMS_OUTPUT.PUT_LINE (idx||' '||fname(idx) );
        END LOOP; 
    END LOOP;
    CLOSE exp_cur;
END;
/

Обясних подробно всеки ред от целия този код във видео урока в моя канал в YouTube. Можете да гледате този урок.

Тъй като в този код сме използвали клауза Bulk Collect с оператора за извличане, това означава, че превключването на контекста няма да бъде проблем. Както знаем, клаузата за групово събиране компресира множество превключватели в един, така че няма по-нататъшно гърло на производителността.

Но означава ли това, че този код е добре оптимизиран и не се нуждае от допълнителна оптимизация? Или по този въпрос ефективността на заявките никога няма да бъде проблем за нас в бъдеще?

Останете на линия, за да получите отговорите на всички тези въпроси, както и да научите как можем допълнително да оптимизираме тази PL/SQL програма.

Надявам се, че сте харесали този блог. Ако имате някакви съмнения или въпроси или смятате, че съм забравил да спомена нещо в този блог, пишете ми на моята Facebook страница или Twitter. Благодаря и приятен ден!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на RazorSQL към Salesforce.com

  2. Какво влияние могат да имат различните опции на курсора?

  3. SQL Self Join

  4. Компресия и нейните ефекти върху производителността

  5. Как да инсталирате Nextcloud 15 на Ubuntu 18.04