SELECT INTO
Instrukcja zwróci błąd, jeśli zwróci cokolwiek innego niż 1 wiersz. Jeśli zwróci 0 wierszy, otrzymasz no_data_found
wyjątek. Jeśli zwróci więcej niż 1 wiersz, otrzymasz too_many_rows
wyjątek. Jeśli nie wiesz, że zawsze będzie dokładnie 1 pracownik z pensją większą niż 3000, nie chcesz, aby SELECT INTO
oświadczenie tutaj.
Najprawdopodobniej chcesz użyć kursora do iteracji (potencjalnie) wielu wierszy danych (zakładam również, że zamierzałeś wykonać prawidłowe połączenie między dwiema tabelami, zamiast robić produkt kartezjański, więc zakładam, że istnieje to departmentID
kolumna w obu tabelach)
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;
Zakładam, że dopiero uczysz się języka PL/SQL. W prawdziwym kodzie nigdy nie użyjesz dbms_output
w ten sposób i nie zależy od tego, czy ktokolwiek zobaczy dane, które zapisujesz do dbms_output
bufor.