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

Метод за събиране:ПРЕДИШНИ И СЛЕДВАЩИ функции в базата данни на Oracle

Както видяхме във въведението в методите за събиране на PL/SQL, има 7 функции за събиране в Oracle Database. Сред тези седем функции вече научихме първите пет метода. Prior и Next са последните два метода/функции за събиране на PL/SQL, които все още остават за изследване.

Така в днешния PL/SQL блог ще разгледаме подробно тези два недокоснати метода за събиране.

Какво представляват функциите за предишно и следващо събиране?

Винаги е добре да имате някои функции под ръкава си, които могат да ви помогнат да се ориентирате в съдържанието на вашата колекция. Функцията Предишна и Следваща може да са тези функции.

И двете функции приемат индекс на колекцията като вход и връщат резултата.

Например методът за събиране на PL/SQL PRIOR приема индекс като вход и връща стойността, съхранена в предишния най-нисък индекс. Докато методът за събиране NEXT връща стойността от следващия по-висок индекс.

Предишно и следващо събиране ли са функции или процедури?

И преди, и следващ са функции.

Можем ли да използваме и двете функции и с трите типа колекции?

Да, функциите за предишна и следваща колекции могат да се използват и с трите типа колекции.

Кога методите за събиране на PL/SQL преди и следващия ще върнат нула?

Методът за събиране Prior връща null, когато няма налични по-ниски индексни стойности, а методът за събиране Next връща null, когато няма налични стойности с по-висок индекс за връщане.

С прости думи можем да кажем, че и двете функции за събиране връщат Null, ако се използват съответно с първия и последния индекс на колекция .

Какъв ще бъде резултатът от методите за събиране Next и Prior, ако ги използваме с асоциативен масив?

Ако методите за събиране PRIOR и NEXT се използват с асоциативни масиви, тогава те ще върнат изход от тип данни VARCHAR2 или LONG.

Чувал съм, че тези методи предизвикват някакъв вид изключение. Вярно ли е?

Да, това е вярно. Ако някоя от тези функции се приложи към неинициализирана вложена таблица или променлива, тогава те повдигат изключението COLLECTION_IS_NULL.

Можете ли да ни демонстрирате как да използваме тези функции в нашия код?

Разбира се, защо не! Ще ви покажа прилагането на функциите за събиране както преди, така и след това с помощта на много лесен код.

Пример за метод за събиране преди.

В този метод ще научим как да използваме метода за събиране преди с вложена таблица.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

В горния анонимен PL/SQL блок имаме два изходни оператора с „Предишно извикване на функция“. Първият изходен оператор ще върне номера на индекса преди номер на индекса 3, който има някаква стойност, съхранена в него. В нашия случай индексът преди индекс номер 3 е 2. Така 2 ще бъде изходът на първия изходен оператор.

Във втория изходен израз извикахме функцията Prior и я предоставихме като вход към обекта за събиране.

var_nt(var_nt.PRIOR(3)) 

Двигателят на Oracle ще изпълни първо функцията Collection преди (нека я наречем част 1) и използвайки резултата от част 1, след това ще изпълни обекта за събиране (нека го наречем част 2) и ще произведе крайния резултат, който ще бъде 18 в нашия случай. Продължете, копирайте кода и опитайте да се изпълните сами.

Какво ще се случи, ако изтрием предишния най-нисък индекс от вложената таблица?

Така че сега въпросът е какво ще се случи, ако изтриете предишния най-нисък индекс, който е 2 в нашия код. В този случай резултатът определено няма да е същият. Предишната функция връща предишния най-нисък индекс. Но този индекс трябва да съдържа някаква стойност.

Опитайте го сами. Ето кода.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Пример за метод за събиране След това.

Можете да използвате метода за събиране на PL/SQL Next, както сте използвали функцията Prior в горния код. Методът за събиране NEXT връща стойността от следващия по-висок индекс. Ето примера

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

И двата примера са почти еднакви, с изключение на извикването на функция за събиране. В раздела за изпълнение на този PL/SQL блок отново имаме два изходни оператора. Първият изходен оператор ще върне следващия номер на непразен индекс, докато вторият ще върне данните, съхранени в този индекс. Работата на двете тези твърдения ще бъде същата, както обсъдихме по-горе. Продължете, копирайте кода и вижте изхода.

Това беше подробният урок за метода за събиране на PL/SQL Next и Prior. Надяваме се, че ви е харесало четенето и сте научили нещо ново. Не забравяйте да споделите този блог във вашите социални медии. За да споделите този блог във вашия 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. Oracle PL/SQL:Създайте DML пакет онлайн

  2. Вмъкване на данни в базата данни на Oracle с помощта на php

  3. Разбиране на разликите между API за таблици и транзакции

  4. Защо не мога да въведа тази дата в таблица с помощта на sql?

  5. JDBC ResultSet получава колони с псевдоним на таблица