Studopediya

КАТЕГОРИЯ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) Полиграфия- (1312) Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военни бизнесмен (14632) Висока technologies- (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къща- (47672) журналистика и смирен (912) Izobretatelstvo- (14524) външен >(4268) Informatika- (17799) Iskusstvo- (1338) историята е (13644) Компютри- (11,121) Kosmetika- (55) Kulinariya- (373) културата е (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23702) математиците на (16968) Механична инженерно (1700) медицина-(12668) Management- (24684) Mehanika- (15423) Naukovedenie- (506) образователна (11852) truda- сигурност (3308) Pedagogika- (5571) Poligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97 182 ) индустрия- (8706) Psihologiya- (18388) Religiya- (3217) Svyaz (10668) Agriculture- (299) Sotsiologiya- (6455) на (42831) спортист строително (4793) Torgovlya- (5050) транспорт ( 2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Electronics- (8441) Elektrotehnika- (4623) Мощност инженерно ( 12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Бърз

В действителност, курсорът е указател към резултата, определен в базата данни. Но с течение - това не е само указател към данните в таблицата. Той посочва зоната на паметта в процеса на глобално площ (PGA), който се нарича контекстно-чувствителна зона, в която да се съхраняват, както следва:

1. Редовете върнати от заявката;

2. броя на редовете, обработвани от искането;

3. указател към разбор заявката в общ басейн.

По този начин, указател към паметта, а не самите данни. И тъй като данните се извлича в паметта, когато курсорът се отваря, потребителят е гарантиран последователен изглед на данните за периода на сделката. Ако след курсора е била отворена, са добавени данните, изтрити или редактирани, новите данни не се записват в комплекта на курсора резултат. Откриване на курсора като моментна снимка на съществуващите към момента на това откритие данни.

Бърз се използват за постепенен достъп до данните на резултатния набор. Има четири различни вида курсори:

Явните курсори - изберете командата, изрично декларирани в секцията за декларации на това устройство или спецификацията на пакет.

Косвените курсори - автоматично се създават в отговор на всяка команда ГСД (SELECT, INSERT, UPDATE, DELETE, се слеят, избира за UPDATE) или SELECT ... INTO в / SQL раздел изпълнение блок PL.

Курсор променливи - декларираните видове, които са в една и съща PL / SQL блок може да се свързва с множество заявки.

Курсор подзаявки или вложени курсора израз - механизма за поставяне на курсора в SQL отчети на.

Явните курсори. Тя осигурява най-високото ниво на контрол за обработка на курсора. Изрично курсора е статична; SQL команда, се определя по време на компилация. Смята се, че те работят с SELECT изявление, че се връща в същото време повече от един ред. За да използвате изрично курсора, трябва да декларират, отворен, изберете данните от нея и близки.

Рекламните изрични курсори. За изрично обявяване на курсора в следния синтаксис се използва като променлива курсор в раздел, блокиране на реклами или пакет:

CURSOR cursor_name [(списък)]

[RETURN тип vozvraschaemyy_]

искането е

[ЗА UPDATE [НА (column_list)] [NOWAIT]];

където cursor_name - всеки валиден документ за самоличност;

spiske_parametrov определят във всяко валидни параметри се използват за извършване на искането;

RETURN избор израза определя типа на данните, които трябва да бъдат върнати на курсора, в определен вид vozvraschaemom_;

поискване - е всеки валиден синтаксис SELECT изявление;

избор израза ЗА UPDATE заключва записа, когато отворите курсора, т.е. те са на разположение на други потребители само в режим само за четене.



Използването ЗА UPDATE е гаранцията, че:

- Ако изпълнение на курсора върху цикъла на запис, те ще бъдат на разположение за актуализации и няма да бъдат блокирани от друга сесия;

- Данните ще съответстват на данните за зоната на съдържание;

- Ако посочите NOWAIT, програмата ще бъде прекратен веднага след откриването, ако тя не е в състояние да създаде изключително заключване.

Ето един пример на изрична курсора обява:

--kursor без параметри:

CURSOR company_cur

Е

SELECT company_id ОТ компания;

Откриване изрични курсори. Курсори са открити в разделите изпълняват или извънредни ситуации блокират. Синтаксис:

OPEN cursor_name [(znacheniya_parametrov)];

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

Записите на пробата от курсора. FETCH команда избира записването на контекстуални променливи в областта, за да може да ги използва в PL / SQL програма. Тази команда работи само на текущия запис и се движи резултатния набор, изберете един елемент наведнъж. Единственото изключение е използването на израза насипни събира, който избира всички записи на снимачната площадка резултат на един път.

FETCH cursor_name INTO spisok_peremennyh или zapis_PL / SQL;

Има cursor_name - е името на една отворена курсора, и spisok_peremennyh - това е един или повече, разделени със запетая променливи, които по брой и вид съответства на броя и вида колони, включени в комплекта резултат.

Ако приемникът използва zapis_PL / SQL, позоваването на стойностите на записа, използвайте следния синтаксис: imya_peremennoy.imya_stolbtsa.

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

CLOSE cursor_name;

След като всички струни са извлечени, курсора трябва да бъде затворен. Механизъм за затваряне на курсора позволява PL / SQL, за да се оптимизира паметта освободи разпределена площ памет на съдържанието в точното време.

Ако курсорът е обявена в местна блок анонимен функция или процедура, подобна на курсора автоматично ще бъдат затворени в края на блока. Бърз, декларирани в опаковката трябва да бъдат затворени изрично, в противен случай те ще останат отворени до края на сесията. Опитвайки се да се затваря курсора, който не е бил отворен, което води до образуването на изключения ORA-01001: НЕВАЛИДЕН курсора.

Качества изрично курсора. За използване с Oracle курсори предлага шест атрибути в Таблица

маса

Името на атрибута описание
% iSOPEN Връща TRUE, ако курсорът е отворена; FALSE - ако курсорът не е отворен.
% намерени Връща NULL преди първата екстракция, вярно - ако е успешно извличане на записи, фалшиви - ако тя не е върнат всички редове. Образувани INVALID_CURSOR изключение, ако курсорът не е открита или вече е затворен.
% NOTFOUND Връща NULL преди първата екстракция, FALSE, ако успешно извличане на записи, вярно - ако тя не е върнат всички редове. INVALID_CURSOR хвърля изключение, ако курсорът не е открита или е вече затворена
% ROWCOUNT Връща броя на записите, извлечени от курсора в произволно време. Образувани INVALID_CURSOR изключение, ако курсорът не е открита или вече е затворен.
% BULK_EXEPTIONS Дава информация за извънредни ситуации с помощта на операции масив или фрази насипни СЪБИРА (psevdoassotsiativny масив, съдържащ поредните номера на записи, които предизвикват изключение и съответните кодове за грешки). За да продължи лечението след изключение се прилага вариантът SAVE изключения.
% BULK_ROWCOUNT Тя се използва и в по-голямата част СЪБИРА операции и предоставя информация за броя на редовете, засегнати по време на работа (psevdoassotsiativny масив, съдържащ броя на записите модифициран FORALL за всеки елемент в колекцията).

Cursor атрибути се използват в съответствие със следния синтаксис:

cursor_name% атрибут

За да се придвижвате през набор от курсори най-често се използва активно данни с нормалните цикли (LOOP ... END LOOP, а), например:

SET SERVEROUTPUT ON

ДЕКЛАРИРАТ

v_author автори% ROWTYPE;

CURSOR auth_cur IS

SELECT *

ОТ автори;

ЗАПОЧНЕТЕ

OPEN auth_cur;

LOOP

FETCH auth_cur INTO v_author

EXIT КОГАТО auth_cur% NOTFOUND;

DBMS_OUTPUT.PUT_LINE (v_author.last_name);

END LOOP;

CLOSE auth_cur;

END;

/

Налице е също така серия от бегъл ЗА, която не изисква изрично възлагане изявления отворени, донесе, CLOSE. Това е, докато курсорът се декларира като изрично, той урежда обработването PL / SQL. В допълнение към ЗА веригата използва променлива, която никога не е била декларирана в променливата част на декларация на блока и курсора. Когато се опитате да отворите вече е отворен курсора в цикъл ЗА PL / SQL хвърля изключение "ORA-06511: PL / SQL: курсора вече е отворен".

SET SERVEROUTPUT ON

ДЕКЛАРИРАТ

CURSOR auth_cur IS

SELECT *

ОТ автори;

ЗАПОЧНЕТЕ

ЗА v_author ПО auth_cur

LOOP

DBMS_OUTPUT.PUT_LINE (v_author .last_name);

END LOOP;

END;

/

Косвените курсори. PL / SQL декларира имплицитно курсора и работа с тях всеки път, когато стартирате DML отчети (INSERT, UPDATE, DELETE или да се слеят) или команда SELECT INTO, който връща един ред от базата данни директно в структурата на данните на PL / SQL. Всеки път, когато стартирате SQL команда директно, докато работите с имплицитни курсори, като всеки оператор ГСД осигурява контекст площ в PGA. За разлика от изричните курсори, имплицитно, не е необходимо да се декларират, отворен, извличане на една линия и в близост, но можете да използвате една и съща шест изрично курсора атрибути под формата на SQL% атрибут (в този случай използването на атрибута SQL% ISOPEN винаги ще се връща FALSE, т.е.. д. в действителност, безполезен).

Общите имплицитни курсори използват синтаксиса е, както следва:

Komanda_SQL

[Отчетно стойност [, стойност ...]

В променлива [, променлива, ...]]

SQL% атрибут;

ВРЪЩАНЕ изявление се използва в INSERT, UPDATE и DELETE изявления за получаване на данни, съответстващи на променило ГСД команда. Използването на тази инструкция да се избегне допълнително SELECT изявление да задава въпроси към резултатите от ГСД команди, като например:

ЗАПОЧНЕТЕ

UPDATE дейност SET last_accesssed: = SYSDATE

КЪДЕ UID = USER_ID

ВРЪЩАНЕ last_accessed, cost_center

В клеймото, chargeback_acct;

Курсор променливи и podzaprsy. Това са примери за реклами на курсора променливи:

--kursor, прилагане на аргументите на spiska_parametrov:

CURSOR company_cur (id_in на брой)

Е

Изберете името ОТ компания

КЪДЕ company_id = id_in;

--kursor съдържащ отчета за ВРЪЩАНЕ:

CURSOR company_cur (id_in на брой)

ВЪРНЕТЕ company_id = id_in;

--kursora съдържащ RETURN инструкции вместо на SELECT изявление:

CURSOR company_cur (id_in на брой)

RETURN компания% ROWTYPE

Последният пример показва, че декларацията на курсора може да се отделя от неговото прилагане, например, заглавието може да се окаже в спецификацията на пакет и изпълнението - в тялото на опаковката.

Има редица ограничения за курсора променливи:

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

- Не можете да зададете променлива курсора NULL на стойност, а също така да използвате операторите на сравнението да се тества за равенство, неравенство и несигурност.

- Не колони база данни или колекции не може да се съхранява на курсора променливи.

- Не използвайте разговори към отдалечени процедури за предаването на курсора променливи от един сървър на друг.

Променлива от тип CURSOR показва на конкретен резултат определя на времето като променлива от тип REF CURSOR може да се използва за обозначаване на различни резултатни набори. В допълнение, SQL-код, използван в променлива REF курсора, може да се извърши в присвоения секцията PL / SQL, която позволява изпълнението на динамичен SQL команда единица.

Резултатът курсора определени и са обекти на базата данни. Комплектът за резултат се съхранява в продължение на толкова дълго, тъй като показва курсора. Ето защо, чрез CURSOR променлива REF могат да организират прехвърлянето на получените набори от данни от програма модул за PL / SQL към друг. REF видове CURSOR също са променливи могат да се крият малки промени в искането.

тип REF_CURSOR има следния синтаксис:

TYPE imya_ref курсорът е REF CURSOR

[RETURN tip_zapis];

където tip_zapis - тя съществува в основата на данните.

Ако не се прилага върне инструкция, след обявен слаб тип REF курсора. Променливите, декларирани със слаб тип REF CURSOR, могат да бъдат съставени от всяко искане по време на изпълнение. Ако инструкция RETURN присъства, вида се определя от силно REF курсора. Променлива силен тип REF CURSOR може да се сравни с тези искания, определен в резултат на което, когато бъдат изпълнени от същия брой елементи и вида на записа на структурата, посочена в отчета за RETURN.

За да се използва променлива от тип REF CURSOR, първо трябва да се създаде вид REF_CURSOR, след което обявява, например въз основа на този тип. Да разгледаме примера на реклами слабите и силните тип REF CURSOR:

ДЕКЛАРИРАТ

--Sozdat Тип Cursor за маса дружество.

TYPE company_curtype Е REF CURSOR

RETURN фирми% ROWTYPE;

--Sozdat Променлива от тип REF курсора.

company_cur company_curtype;

--Slaby Type, общ подход.

TYPE any_curtype Е REF CURSOR;

generic_curvar any_curtype;

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

OPEN ... ЗА

Отворен за imya_kurosra select_komanda;

Курсор подзаявки. Курсора подзаявки се наричат ​​също вложени курсора изрази, тъй като те използват курсора вътре оператор SELECT SQL израз език. С други думи, курсори се използват като израз за колоната в списъка за селекция за изричното курсора. Те могат да се използват с всички видове курсори, определени по-рано, освен имплицитно. Върнатата стойност е винаги на латиница REF курсора.

Курсора изрази могат да намалят количеството на излишни данни, които се връщат на викащата програма. Следователно те могат да бъдат използвани вместо техники, изискващи маси връзка. Курсорът е израз се отваря автоматично, когато извадите ред родител, и затворени, когато едно от събитията:

- Вложени курсора е затворен изрично от програмата.

- Затваря курсора родител.

- Повторно изпълнение на курсора родител.

- По време на извличането на родителски линии, генерирани изключение.

CURSOR връща вложените курсора от искането и има следния синтаксис:

CURSOR (подзаявка)

Помислете за пример, че използвате курсора подзаявка изрично курсора:

SET SERVEROUTPUT ON

ДЕКЛАРИРАТ

cv_author SYS_REFCURSOR;

v_title BOOKS.TITLE% ВИД;

. V_author АВТОРИТЕ% ROWTYPE;

v_counter PLS_INTEGER: = 0;

CURSOR book_cur

Е

SELECT b.title

CURSOR (SELECT *

<== Предишна лекция | На следващата лекция ==>
| Бърз

; Дата: 04.01.2014; ; Прегледи: 228; Нарушаването на авторските права? ;


Ние ценим Вашето мнение! Беше ли полезна публикуван материал? Да | не



ТЪРСЕНЕ:


Вижте също:



zdes-stroika.ru - Studopediya (2013 - 2017) на година. Тя не е автор на материали, и дава на студентите с безплатно образование и използва!
Page генерирана за 0.03 секунди.