En SELECT INTO
sætningen vil give en fejl, hvis den returnerer noget andet end 1 række. Hvis det returnerer 0 rækker, får du en no_data_found
undtagelse. Hvis det returnerer mere end 1 række, får du en too_many_rows
undtagelse. Medmindre du ved, at der altid vil være præcis 1 medarbejder med en løn på mere end 3000, ønsker du ikke en SELECT INTO
erklæring her.
Mest sandsynligt vil du bruge en markør til at iterere over (potentielt) flere rækker af data (jeg antager også, at du havde til hensigt at lave en ordentlig forbindelse mellem de to tabeller i stedet for at lave et kartesisk produkt, så jeg antager, at der er et departmentID
kolonne i begge tabeller)
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;
Jeg går ud fra, at du også bare lærer PL/SQL. I ægte kode ville du aldrig bruge dbms_output
sådan og ville ikke afhænge af, at nogen ser data, som du skriver til dbms_output
buffer.