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

Какво е курсор в oracle

Какво е курсорът в oracle

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

Типове курсори в Oracle

  • Неявен курсор в Oracle
  • Явен курсор в Oracle

Явни курсори

Явните курсори имат следните етапи

1) Деклариране:Ние декларираме името на курсора и дефинираме структурата на заявката

2) Open:  Операторът open изпълнява заявката и обвързва всяка променлива, която е посочена. Редовете, идентифицирани от заявката, се наричат ​​Активни набори. И сега това е достъпно за изтегляне

Какво е активен набор: Наборът от редове, върнати от многоредова заявка

Неговият размер е броят на редовете, който отговаря на вашите критерии за търсене

3) Извличане:На този етап редовете се извличат от курсора и след всяко извличане тествате курсора за всички останали редове, ако няма редове, продължавате със затварянето на курсора

4) Close:Операторът close освобождава активния набор от редове и можем отново да отворим курсора, за да извлечем обновяващ активен набор

Подробни етапи

Деклариране на курсор

  • Име на курсора
  • Структура на заявката
Syntax:
 CURSOR  IS   :  It includes most of the usual clauses, but INTO Clause is not allowed
Example:
 DECLARE
 CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’;
 ………………………………
 BEGIN
 ………………………………
 END;

Отваряне на курсор

Тук се извършва синтактичен анализ и изпълнение на заявка. След отваряне на курсора, редовете, върнати от заявката, са достъпни за извличане.

Syntax:
 Open <cursor name>
 This statement is used within the executable section of the block.
 It also establishes an active set of the rows
Example:
  OPEN cur1;
 DECLARE
 v_salary number;
 CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_salary;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE (v_salary);
 END LOOP;
 CLOSE cur1;
 END;
 /

Курсорът вече ще сочи към първия ред в активния набор.

Извличане на редовете

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

Променливата се извършва чрез израза FETCH

Syntax: 
 FETCH  INTO ;
  • За всяка стойност на колона, върната от заявката, свързана с курсора, трябва да има

съответната променлива в списъка INTO.

  • СЪЩО техните типове данни трябва да са съвместими

ЗАТВАРЯНЕ НА КУРСОР

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

Syntax:
 CLOSE <cursor-name>;
Example: 
 CLOSE cur1
Example of Using CLOSE <Cursor Name>
 DECLARE
 v_address emp.address%TYPE;
 CURSOR cur1 is select address from emp;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_address;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE(v_address);
 END LOOP;
 CLOSE cur1;
 END;
 /

Явни атрибути на курсора

Атрибут Тип Описание
%ISOPEN Булев Оценява на TRUE, ако курсорът е отворен
% НЕ НАМЕРЕНО Булев Оценява на TRUE, ако последното извличане не върне ред
% НАМЕРЕНО Булев Оценява на TRUE, ако най-скорошното извличане върне ред
%ROWCOUNT NUMBER Оценява общия брой върнати до момента редове

Разширена концепция с курсора на Oracle

Курсор и записи на Oracle

1) Вече прочетохме за PLSQL записи.

2) Можем да обработим редовете на активния набор чрез извличане на стойности в PL/SQL запис също

3) Можем също да дефинираме plsql запис въз основа на избрания списък от колони в изричните курсори.

Пример

DECLARE 
 CURSOR dept_cursor is Select deptno,dept_name  FROM   dept;
 dept_record dept_cursor%rowtype;
 BEGIN
 OPEN dept_cursor;
 LOOP
 FETCH dept_cursor INTO dept_record;
 Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name);
 EXIT WHEN dept_cursor%notfound;
 END LOOP;
 Commit;
 CLOSE dept_cursor;
 END;
 /

Курсор с параметри/параметризиран курсор в оракул

Syntax: 
 CURSOR cursor_name(parameter_name datatype,  )
 IS
 Select_statement;

1) Предайте стойностите на параметрите на курсора, когато курсорът е отворен и заявката се изпълнява

2) Отворете явен курсор няколко пъти с различни активни набори всеки път

Open cursor_name(parameter_value , ……);

Пример

DECLARE 
 CURSOR cur1(v_deptno number) is
 Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno;
 Dept_record      cur1%rowtype;
 l_deptno  number:=111;
 BEGIN
 OPEN  cur1(112);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 OPEN cur1(l_deptno);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 END;
 /

 Сродни статии

Как да работите с дата в Oracle sql
Oracle PLSQL таблици
Всичко за Oracle PLSQL записи
Най-често задавани 25 въпроса за интервю за oracle plsql
блокова структура на Oracle PLSQL и променлива на Oracle PLSQL
Атрибути на курсора


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се извлече идентификатора на последния вмъкнат ред в Hibernate с помощта на Oracle

  2. SQL Server:как да имитираме заявката за запазване на oracle с dense_rank?

  3. Как да активирате проследяване в приложения на Oracle r12

  4. Как да заредя голям брой низове, които да съответстват на базата данни на Oracle?

  5. Как да премахнете „Избрани X редове“ в SQLcl &SQL*Plus (Oracle)