En SELECT INTO
uttalandet kommer att ge ett fel om det returnerar något annat än 1 rad. Om den returnerar 0 rader får du en no_data_found
undantag. Om den returnerar mer än 1 rad får du en too_many_rows
undantag. Om du inte vet att det alltid kommer att finnas exakt 1 anställd med en lön som är högre än 3000, vill du inte ha en SELECT INTO
uttalande här.
Troligtvis vill du använda en markör för att iterera över (potentiellt) flera rader med data (jag antar också att du tänkte göra en korrekt sammanfogning mellan de två tabellerna istället för att göra en kartesisk produkt så jag antar att det finns är ett departmentID
kolumn i båda tabellerna)
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;
Jag antar att du bara lär dig PL/SQL också. I riktig kod skulle du aldrig använda dbms_output
så här och skulle inte vara beroende av att någon ser data som du skriver till dbms_output
buffert.