A SELECT INTO La declaración arrojará un error si devuelve algo que no sea 1 fila. Si devuelve 0 filas, obtendrá un no_data_found excepción. Si devuelve más de 1 fila, obtendrá un too_many_rows excepción. A menos que sepa que siempre habrá exactamente 1 empleado con un salario superior a 3000, no desea un SELECT INTO declaración aquí.
Lo más probable es que desee usar un cursor para iterar (potencialmente) varias filas de datos (también asumo que tenía la intención de hacer una unión adecuada entre las dos tablas en lugar de hacer un producto cartesiano, así que asumo que hay es un departmentID columna en ambas tablas)
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;
Supongo que también estás aprendiendo PL/SQL. En código real, nunca usarías dbms_output así y no dependería de que nadie vea los datos que escribe en el dbms_output búfer.