A SELECT INTO
příkaz vyvolá chybu, pokud vrátí něco jiného než 1 řádek. Pokud vrátí 0 řádků, dostanete no_data_found
výjimka. Pokud vrátí více než 1 řádek, dostanete too_many_rows
výjimka. Pokud nevíte, že vždy bude přesně 1 zaměstnanec s platem vyšším než 3000, nechcete SELECT INTO
prohlášení zde.
S největší pravděpodobností chcete použít kurzor k iteraci přes (potenciálně) více řádků dat (předpokládám také, že jste zamýšleli provést správné spojení mezi dvěma tabulkami spíše než provést kartézský součin, takže předpokládám, že je departmentID
sloupec v obou tabulkách)
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;
Předpokládám, že se také teprve učíte PL/SQL. Ve skutečném kódu byste nikdy nepoužili dbms_output
takto a nezávisí na tom, že někdo uvidí data, která zapíšete do dbms_output
vyrovnávací paměti.