CURSOR c1 IS
SELECT empno, sal+NVL(comm,0), job FROM ...
В таких случаях, нужно включить псевдоним для единицы выбора. В следующем примере, заработная плата - псевдоним для единицы выбора sal+NVL(comm,0):
CURSOR c1 IS
SELECT empno, sal+NVL(comm,0) wages, job FROM ...
Чтобы ссылаться на соответствующее поле, используется псевдоним вместо имени столбца, следующим образом:
IF emp_rec.wages < 1000 THEN ...
Передача параметров
Можно передавать параметры для курсора, используемого в курсорном цикле FOR. В следующем примере, передается номер отдела. Затем, вычисляется общая заработная плата, оплаченная служащим в том отделе. Также, определяется, сколько служащих имеют жалованье выше чем $ 2000 и сколько имеют комиссии большими чем их жалованье.
-- доступный интерактивно в файле EXAMP8
DECLARE
CURSOR emp_cursor(dnum NUMBER) IS
SELECT sal, comm FROM emp WHERE deptno = dnum;
total_wages NUMBER(11,2) := 0;
high_paid NUMBER(4) := 0;
higher_comm NUMBER(4) := 0;
BEGIN
/* Число итераций будет равняться числу строк *
* возвращенных emp_cursor. */
FOR emp_record IN emp_cursor(20) LOOP
emp_record.comm := NVL(emp_record.comm, 0);
total_wages := total_wages + emp_record.sal +
emp_record.comm;
IF emp_record.sal > 2000.00 THEN
high_paid := high_paid + 1;
END IF;
IF emp_record.comm > emp_record.sal THEN
higher_comm := higher_comm + 1;
END IF;
END LOOP;
INSERT INTO temp VALUES (high_paid, higher_comm,
'Total Wages: ' || TO_CHAR(total_wages));
COMMIT;
END;
Курсорные переменные
Подобно курсору, курсорная переменная указывает на текущую строку активного множества многострочного запроса. Но, в отличие от курсора, курсорная переменная может быть открыта для любого запроса совместимого по типам. Она не привязана к определённому запросу. Курсорные переменные являются настоящими переменными PL/SQL, которым можно присваивать новые значения и которые можно передавать подпрограммам, хранимым в базе данных Oracle. Это дает большую гибкость и удобный способ централизовать поиск данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.