A SELECT INTO
операторът ще изведе грешка, ако върне нещо различно от 1 ред. Ако върне 0 реда, ще получите no_data_found
изключение. Ако върне повече от 1 ред, ще получите too_many_rows
изключение. Освен ако не знаете, че винаги ще има точно 1 служител със заплата по-голяма от 3000, не искате SELECT INTO
изявление тук.
Най-вероятно искате да използвате курсор, за да преглеждате (потенциално) множество реда данни (предполагам също, че възнамерявате да направите правилно свързване между двете таблици, вместо да правите декартов продукт, така че предполагам, че има е departmentID
колона в двете таблици)
BEGIN
FOR rec IN (SELECT EMPLOYEE.EMPID,
EMPLOYEE.ENAME,
EMPLOYEE.DESIGNATION,
EMPLOYEE.SALARY,
DEPARTMENT.DEPT_NAME
FROM EMPLOYEE,
DEPARTMENT
WHERE employee.departmentID = department.departmentID
AND EMPLOYEE.SALARY > 3000)
LOOP
DBMS_OUTPUT.PUT_LINE ('Employee Nnumber: ' || rec.EMPID);
DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
DBMS_OUTPUT.PUT_LINE ('Employee Name: ' || rec.ENAME);
DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
DBMS_OUTPUT.PUT_LINE ('Employee Designation: ' || rec.DESIGNATION);
DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
DBMS_OUTPUT.PUT_LINE ('Employee Salary: ' || rec.SALARY);
DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
DBMS_OUTPUT.PUT_LINE ('Employee Department: ' || rec.DEPT_NAME);
END LOOP;
END;
Предполагам, че просто изучавате PL/SQL. В реалния код никога не бихте използвали dbms_output
като това и няма да зависи от това, че някой вижда данни, които записвате в dbms_output
буфер.