Ответ 1
ОператорA SELECT INTO
выдаст ошибку, если возвращает что-либо, кроме 1 строки. Если он возвращает 0 строк, вы получите исключение no_data_found
. Если он возвращает более 1 строки, вы получите исключение too_many_rows
. Если вы не знаете, что всегда будет ровно 1 сотрудник с зарплатой более 3000, вы не хотите здесь <<20 > .
Скорее всего, вы хотите использовать курсор для перебора (потенциально) нескольких строк данных (я также предполагаю, что вы намеревались сделать правильное соединение между двумя таблицами, а не делать декартовский продукт, поэтому я предполагая, что в обеих таблицах есть столбец departmentID
)
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;
Я предполагаю, что вы просто изучаете PL/SQL. В реальном коде вы никогда не будете использовать dbms_output
как это и не будете зависеть от того, кто видит данные, которые вы пишете в буфере dbms_output
.