--- курсор базы данных Oracle

- Запрос для всех сотрудников номера, имя сотрудника и должности.
DECLARE
- определить курсор
курсора emp_cursor ЗЕЬЕСТ EMPNO ИС, ENAME, Иов FROM EMP;
v_empno emp.empno ТИПА%;
v_ename emp.ename ТИПА%;
v_job emp.job ТИПА%;
Бегин
- открыть курсор, выполнять запросы
ОТКРЫТЬ emp_cursor;
- - извлечение данных
LOOP
FETCH INTO emp_cursor v_empno, v_ename, v_job;
DBMS_OUTPUT.PUT_LINE ( 'номер сотрудника:' || v_empno || 'имя:' || v_ename || 'положение:' || v_job);
- что когда для выхода из цикла?
-% FOUND,% NOTFOUND
выходе группы При emp_cursor% NOTFOUND;
КОНЕЦ LOOP;
- закрыть курсор
ЗАКРЫТЬ emp_cursor;
КОНЕЦ;

- Запрос для всех сотрудников номера, имя сотрудника и должности.
DECLARE
- определить курсор
курсор emp_cursor ЗЕЬЕСТА EMPNO ИС, ENAME, Иов FROM EMP;
v_empno emp.empno ТИП%;
v_ename emp.ename ТИП%;
v_job emp.job ТИП%,
Бегин
- открыть курсор, выполнить запрос
--OPEN emp_cursor ;
- обнаружение того, открыт ли курсор
КРП ТОГДА emp_cursor% ISOPEN
DBMS_OUTPUT.PUT_LINE ( «курсор уже открыт»);
иНАЧЕ
DBMS_OUTPUT.PUT_LINE ( «курсор не открыт»);
КОНЕЦ КРП;

КОНЕЦ;

- курсор для контура
DECLARE
CURSOR emp_cursor ЗЕЬЕСТА EMPNO ИС, ENAME, Иов FROM EMP;
Бегин
ДЛЯ LOOP emp_record ИН emp_cursor
в DBMS_OUTPUT.PUT_LINE ( 'номер сотрудника:' || emp_record.empno || 'Название:' || emp_record.ename || 'позиция:' || emp_record.job);
END LOOP;
END;

- курсор для цикла , указанного в подзапросов
НАЧАТЬ
ДЛЯ emp_record ИН (выбранный EMPNO, ENAME, задание FROM EMP) LOOP
DBMS_OUTPUT.PUT_LINE ( «номер сотрудника : '|| emp_record.empno ||', имя: '|| emp_record.ename ||', позиция: «|| emp_record.job);
КОНЕЦ LOOP;
КОНЕЦ;

-参数游标
DECLARE
CURSOR emp_cursor (ДНО номер) ВЫБРАТЬ EMPNO, ENAME, задание FROM EMP WHERE DEPTNO = ДНО;
Не НАЧАТЬ
ДЛЯ emp_record В emp_cursor (& нет) LOOP
DBMS_OUTPUT.PUT_LINE ( '员工号:' || emp_record.empno || '姓名: '|| emp_record.ename ||',职位:' || emp_record.job);
END LOOP;
КОНЕЦ;

- Входной номер служащего пользователя, чтобы обновить указанную зарплату сотрудников, такие , как рост заработной платы 100
- неявный курсор
Бегин
в UPDATE empnew на SET SAL + SAL = 100 & ГДЕ EMPNO = НЕТ;
ПЧ найден , то SQL - %
DBMS_OUTPUT.PUT_LINE ( «успешно изменено заработной платы);
COMMIT;
ELSE
DBMS_OUTPUT.PUT_LINE ( 'заработная плата не в состоянии изменить') ;!
ROLLBACK;
END IF;
END;

SELECT * FROM empnew;

- Пресс - название сотрудники поднимание, президент вырос 1000 юаней, 500 юаней менеджеров, другие сотрудники выросли 300 юаней.
--1: бизнес - требования для достижения отображения курсора обычным образом
в DECLARE
- для определения курсора
CURSOR empnew_cursor ЗЕЬЕСТА EMPNO ИС, ОТ Работа empnew;
v_empno empnew.empno ТИП%;
v_job empnew.job ТИП%,
Бегин
- открыть курсор
ОТКРЫТОГО empnew_cursor;
- извлечение данных
LOOP
; выборки empnew_cursor в v_empno INTO, v_job
ПЧ v_job = 'ПРЕЗИДЕНТ' , а затем
в UPDATE empnew на SET SAL + SAL ГДЕ EMPNO = v_empno = 1000;
ELSIF v_job = 'МЕНЕДЖЕР' ТОГДА
Данное обновление empnew на SET SAL + SAL = 500 = ГДЕ EMPNO v_empno;
ELSE
Оператор UPDATE empnew множества SAL + SAL = 300 = ГДЕ EMPNO v_empno;
Конечный ПЧ;
выход группы При empnew_cursor% NOTFOUND;
КОНЕЦ LOOP;
ПОРУЧАТЬ;
- Закройте курсор
ЗАКРЫТЬ empnew_cursor;
КОНЕЦ;

--2:用游标ДЛЯ循环的方式实现业务需求
DECLARE
-定义游标
CURSOR empnew_cursor IS SELECT , EMPNO, работа ОТ empnew;
НАЧАТЬ
ДЛЯ empnew_record В empnew_cursor LOOP
DBMS_OUTPUT.PUT_LINE (empnew_record.empno || '----' || empnew_record.job);
ЕСЛИ empnew_record.job = 'PRESIDENT' THEN
UPDATE empnew SET сала = сала + 1000 WHERE EMPNO = empnew_record.empno;
ELSIF empnew_record.job = 'МЕНЕДЖЕР' ТОГДА
UPDATE SET empnew сала = сала + 500 ГДЕ EMPNO = empnew_record.empno;
ИНАЧЕ
ОБНОВЛЕНИЕ empnew SET сала = сала + 300 ГДЕ EMPNO = empnew_record.empno;
END IF;
END LOOP;
--COMMIT;
КОНЕЦ;

выберите * от empnew для обновления;


--3: При добавлении или удаления данных с помощью курсора, когда курсор определяются с помощью курсора FOR пункта UPDATE может быть извлечен из уровня строк данных блокировки
в DECLARE
- определить курсор
курсор empnew_cursor в SELECT , EMPNO ИСЫ, ОТ empnew Работы FOR UPDATE;
Бегин
, ЗА The In LOOP empnew_cursor empnew_record
dbms_output.put_line (empnew_record.empno || '----' || empnew_record.job);
ИФ empnew_record.job = 'ПРЕЗИДЕНТ' ТОГДА
Данное обновление empnew множества = SAL + SAL от 1000 empnew_cursor ТОК ГДЕ;.
ELSIF empnew_record = .JOB 'МЕНЕДЖЕР' ТОГДА
Данное обновление empnew в SET SAL + SAL = 500. empnew_cursor ТОК ГДЕ;
ELSE
Оператор UPDATE empnew на SET SAL + SAL = 300. empnew_cursor ТОК ГДЕ;
КОНЕЦ ПЧ;
КОНЕЦ LOOP;
ПОРУЧАТЬ;
КОНЕЦ;

SELECT * FROM empnew;

-АЯся UPDATE NOWAIT не ждать блокировок, например, найти в строке данных имеет операцию блокировки, не будет ждать, немедленно вернуться
в DECLARE
- определить курсор
курсор empnew_cursor ЗЕЬЕСТА EMPNO ИС, то для задания ОТ empnew в NOWAIT UPDATE;
Бегин
для цикла empnew_record ИН empnew_cursor
dbms_output.put_line (empnew_record.empno || '----' || empnew_record.job);
ИФ empnew_record.job = 'ПРЕЗИДЕНТ' ТОГДА
Данное обновление empnew множества = SAL + SAL от 1000 empnew_cursor ТОК ГДЕ;.
ELSIF empnew_record.job = ' МЕНЕДЖЕР «ТОГДА
Данное обновление empnew в SET SAL + SAL = 500. empnew_cursor ТОК ГДЕ;
ELSE
Оператор UPDATE empnew на SET SAL + SAL = 300. empnew_cursor ТОК ГДЕ;
КОНЕЦ ПЧ;
КОНЕЦ LOOP;
ПОРУЧАТЬ;
КОНЕЦ;

SELECT * FROM empnew;

-使用ИЗ子句在特定表上加行共享锁
ЗАЯВЛЯЮ
КУРСОРОМ empnew_cursor IS
ВЫБОР d.dname DNAME, e.ename ENAME
ОТ empnew е присоединиться к DEPT д на e.deptno = d.deptno
WHERE e.deptno = & DEPTNO
FOR UPDATE О e.deptno;
НАЧАТЬ
ДЛЯ empnew_record В empnew_cursor LOOP
DBMS_OUTPUT.PUT_LINE ( '部门名称:' || empnew_record.dname || '员工名:' || empnew_record.ename);
DELETE FROM empnew WHERE CURRENT OF empnew_cursor;
END LOOP;
COMMIT;
КОНЕЦ;

SELECT * FROM empnew , где DEPTNO = 20;

 

 

 

 

 


рекомендация

отwww.cnblogs.com/xiaomifeng1010/p/11117347.html