PL/SQL SYS_REFCURSOR в базата данни на Oracle
Както научихме във въведението на референтния курсор, че има три типа PL/SQL референтен курсор в Oracle Database.
- Силен референтен курсор
- Слаб референтен курсор и
- SYS_REFCURSOR
Досега в тази серия разгледахме концепциите за силен, както и за слаб референтен курсор. Единственият тип курсор, който все още не е докоснат, е PL/SQL SYS_REFCURSOR в Oracle Database. Което ще научим в този блог.
Какво е PL/SQL SYS_REFCURSOR?
SYS_REFCURSOR е предварително дефиниран слаб референтен курсор, който се предлага вграден със софтуера за база данни на Oracle.
Как ще ни помогне това, че е предварително дефиниран референтен курсор?
SYS_REFCURSOR е предварително дефиниран слаб референтен курсор, което означава, че не е нужно да го дефинираме в нашия код, както направихме с изричния слаб референтен курсор в предишния урок. Както научихме в този урок, създаването на слаб референтен курсор е процес в две стъпки. Първо трябва да създадете „слабия ref cursor type“ и след това трябва да създадете „променлива на курсора“, използвайки този ref курсор.
Когато използвате SYS_REFCURSOR, просто трябва да създадете променлива на курсора и нищо друго. SYS_REFCURSOR напълно минимизира първата стъпка, в която създавате слабия тип референтен курсор.
Значи Sys_Refcursor е вграден референтен курсор, къде можем да намерим неговата дефиниция?
Можете да разберете дефиницията на PL/SQL SYS_REFCURSOR в скрипт, наречен “stdspec.sql”. Можете да намерите този скрипт в директорията, чийто път е както следва.
%ORACLE_HOME% \RDBMS\ADMIN\stdspec.sql
SYS_REFCURSOR дефиницията ще изглежда така:
Какъв тип Ref Cursor е SYS_REFCURSOR?
Както бе споменато по-горе в дефиницията, SYS_REFCURSOR е слаб референтен курсор.
Сега, когато изчистихте почти всички съмнения относно SYS_REFCURSOR. Искам само да ви задам един последен въпрос.
Информация:Няма интервал между REF и CURSOR. Това е една дума „RefCursor“.
Грешно:SYS_REF CURSOR
Правилно:SYS_REFCURSOR
Защо някой би декларирал слаб референтен курсор, когато вече имаме предварително дефиниран?
Това всъщност е много добър въпрос. Отговорът на този въпрос е Не, не е необходимо изрично да създаваме слаб референтен курсор. Oracle сведе до минимум необходимостта от създаване на слаб референтен курсор, като изпрати SYS_REFCURSOR като част от стандартния пакет след Oracle Database 9i, въпреки че опцията за създаване все още е налична.
Това е като личен избор, ако някой иска да създаде слаб референтен курсор, тогава може. Ако не, тогава те имат SYS_REFCURSOR винаги на свое разположение. Моят скъп приятел Стивън Фойерщайн направи много добра публикация в блога, отговаряща на този въпрос, която можете да прочетете тук.
Нека видим много лесен пример, демонстриращ как да използвате PL/SQL SYS_REFCURSOR в Oracle Database.
Пример:Как да създадете PL/SQL SYS_REFCURSOR в Oracle Database?
SET SERVEROUTPUT ON; DECLARE --Declare cursor variable of SYS_REFCURSOR type cur_var SYS_REFCURSOR; --Declare variables for holding data f_name employees.first_name%TYPE; emp_sal employees.salary%TYPE; BEGIN OPEN cur_var FOR SELECT first_name, Salary FROM employees WHERE employee_id = 100; FETCH cur_var INTO f_name, emp_sal; CLOSE cur_var; DBMS_OUTPUT.PUT_LINE(f_name ||' '||emp_sal); END; /
Можете да гледате видеоурока в канала на YouTube за подробно обяснение на горния код.
Надяваме се, че ви е харесало четенето и сте научили нещо ново. Моля, споделете този блог в социалните си медии с приятелите си. Благодаря и приятен ден.