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

PL/SQL Силен референтен курсор с дефиниран от потребителя тип данни на запис

Силен референтен курсор с дефиниран от потребителя тип данни на запис

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

Въпреки това, преди да продължите напред в този урок, ви предлагам да се запознаете със знанията за PL/SQL Ref Cursors. Специално Силният референтен курсор и типът данни за дефиниран от потребителя запис. Освен това, за ваше удобство предоставям всички необходими връзки тук:

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

Предишният урок успешно показа как PL/SQL Strong ref курсор извлича и обработва данни от всички колони на ред. Но какво ще стане, ако искаме данните от конкретна колона на ред? Да кажем, че просто искаме да видим имейла или заплатата на служител. Следователно, ние не искаме да харчим скъпите ресурси за извличане на цялата ненужна информация. И така, можем ли да използваме същия референтен курсор за това? Нека разберем.

Можем ли да използваме Strong Ref Cursor, който създадохме в предишния урок, за да извлечем данни от конкретна колона?

Отговорът на този въпрос е Не, не можем .

Тъй като този силен референтен курсор е създаден с помощта на тип данни на запис, базиран на таблица. За да илюстрираме, когато създаваме тип данни на запис, базиран на таблица, двигателят на Oracle създава съставна структура от данни. Тази структура е пълна с полета, съответстващи на всяка колона от посочената таблица.

Освен това, всички тези полета автоматично се присвояват със същото име и същия тип данни като колоните на основната таблица. Но когато става въпрос за инициализиране на запис с помощта на конкретна колона, ние трябва да свършим цялата тази работа ръчно.

За да го разберете по-ясно, моля, вижте PL/SQL урок 34. Там обсъдих подробно как да инициализирам типа данни на записа и неговата работа.

И така, какво е решението на този проблем?

Можем лесно да решим този проблем. Можем да създадем PL/SQL силен референтен курсор с променлива тип данни за дефиниран от потребителя запис.

Пример:PL/SQL силен референтен курсор с променлива от тип данни на дефиниран от потребителя запис.

Например, ние искаме да създадем силен референтен курсор с оператора SELECT. Което връща само заплатата на служителя, чийто идентификационен номер на служител е 100.

SET SERVEROUTPUT ON;
DECLARE
	--Create User-Defined Record Datatype
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
	--Declare Strong Ref Cursor
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
	--Another anchored datatype variable for holding data
    at_var  employees.salary%TYPE;
BEGIN
   OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var);
END;
/

Така че, нека разбием този код и да видим какво се случва тук.

Раздел за декларация

DECLARE
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
    at_var  employees.salary%TYPE;

Ето нашата секция за декларации. В първите три реда на този раздел създадохме нашия потребителски дефиниран тип данни на запис с името my_rec. Освен това, този тип данни за запис, дефиниран от потребителя, има само едно поле, което е emp_sal. Emp_sal е поле за закотвен тип данни, което е проектирано над колоната за заплати в таблицата на служителите. Тъй като emp_sal е с закотвен тип данни, той автоматично ще получи присвоен тип данни и ширината на данните на основната колона, която в този случай е заплата.

Веднага след това декларирахме нашия PL/SQL Strong Ref Cursor с името “RefCur”. Типът връщане на този силен референтен курсор е “my_rec” . Следвано от декларация на курсора, създадохме променлива на курсора с името cur_var. Освен това тази променлива се използва за препращане към курсора със силна референтна информация напред в кода.

Освен променливата на курсора, имаме и друга променлива, декларирана в този раздел. Тази променлива е „at_var“, това отново е закотвена променлива от тип данни. Използва се за съхраняване на данните, върнати от курсора.

Сега да стигнем до секцията за изпълнение.

Раздел за изпълнение

BEGIN
    OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var);
END;
/

Тази секция за изпълнение има четири изпълними реда кодове. Да видим какви са те.

Ред 1:Отворете за изявление

Това изявление динамично отваря споменатия курсор. След това прикачва оператора SELECT, който е посочен непосредствено след ключовата дума FOR.

В нашия случай този израз отваря силния ref курсор с помощта на курсорната променлива “cur_var” – оператор SELECT. Което връща данните само от „колоната за заплати“ на таблицата на служителите.

Ред 2:Извличане на изявление

Тази инструкция ще извлече данните от референтния курсор и ще ги съхрани в променливата „at_var“. Също толкова важно е да се уверите, че типът данни на извлечените данни и този на променливата, в която се съхраняват данните, трябва да съвпадат. В противен случай ще има грешка.

Ред 3:Затворете изявление

Третият ред е близко изявление. Затварянето на курсор, с който сте готови, е добра практика.

Ред 4:Изходен израз

И накрая, последният оператор на секцията за изпълнение е операторът DBMS_OUTPUT. И показва заплатата на служителя обратно на потребителя.

Тези четири реда завършват секцията за изпълнение на този PL/SQL блок. Освен това успешното изпълнение на този код трябва да ви покаже заплатата с форматирания низ.

Един от тези, които се учат по-добре, като гледат видео? След това ето видео урока за Strong ref cursor с дефиниран от потребителя тип данни на запис.

Това е всичко за този урок. Не забравяйте да споделите този блог в социалните си медии и помогнете на другите да учат. Можете да се абонирате за канала в YouTube за още интересни уроци. Благодаря и приятен ден!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на ODBC данни в RapidMiner

  2. Разбиране на групата за повторен дневник срещу файл срещу член

  3. Схемата на снежинката

  4. Какво представляват тригерите в SQL и как да ги приложим?

  5. SQL DROP COLUMN за начинаещи