Un SELECT INTO
l'istruzione genererà un errore se restituisce qualcosa di diverso da 1 riga. Se restituisce 0 righe, otterrai un no_data_found
eccezione. Se restituisce più di 1 riga, otterrai un too_many_rows
eccezione. A meno che tu non sappia che ci sarà sempre esattamente 1 dipendente con uno stipendio superiore a 3000, non vuoi un SELECT INTO
dichiarazione qui.
Molto probabilmente, si desidera utilizzare un cursore per scorrere (potenzialmente) più righe di dati (suppongo anche che si intendesse eseguire un join corretto tra le due tabelle anziché eseguire un prodotto cartesiano, quindi presumo che ci è un departmentID
colonna in entrambe le tabelle)
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;
Presumo che tu stia solo imparando anche PL/SQL. Nel codice reale, non useresti mai dbms_output
in questo modo e non dipenderebbe dal fatto che qualcuno veda i dati che scrivi in dbms_output
buffer.