我想显示:员工ID,员工姓名,工作ID,工资,4名员工的工作ID如SA_MAN,工资> 10000使用循环语句我写了这段代码但是我收到错误
这段代码出了什么问题?
DECLARE
emp_name employees.last_name%type;
emp_id employees.employee_id%type;
sal employees.salary%type;
jobid employees.job_id%type;
BEGIN
SELECT employee_id,
last_name,
job_id,
salary
INTO emp_id,
emp_name,
jobid,
sal
FROM employees
WHERE salary>10000
AND job_id LIKE'%SA\_%N' ESCAPE'\';
FOR i 1..3 dpms_output.put_line(emp_id||' '||emp_name||' '||jobid||' '||sal);
END LOOP;
END;
这是我得到的错误:
Error starting at line 1 in command:
DECLARE
emp_name employees.last_name%type;
emp_id employees.employee_id%type;
sal employees.salary%type;
jobid employees.job_id%type;
BEGIN
SELECT employee_id,
last_name,
job_id,
salary
INTO emp_id,
emp_name,
jobid,
sal
FROM employees
WHERE salary>10000
AND job_id LIKE'%SA\_%N' ESCAPE'\';
FOR i 1..3 dpms_output.put_line(emp_id||' '||emp_name||' '||jobid||' '||sal);
END LOOP;
END;
Error report:
ORA-06550: line 20, column 7:
PLS-00103: Encountered the symbol "1" when expecting one of the following:
in
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
答案 0 :(得分:0)
这可以通过以下方式实现:
begin
for i in ( SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary > 10000
AND job_id LIKE '%SA\_%N' ESCAPE '\' ) LOOP
dbms_output.put_line( i.employee_id || ' '
|| i.last_name || ' '
|| i.job_id || ' '
|| i.salary );
end loop;
end;
你不需要这样做。你可以选择你想要的东西。更一般地说,请注意你的间距,这会使你的代码更具可读性。
实际错误如下:
如果您正在执行FOR LOOP,则需要IN和LOOP
FOR i 1..3
应为for i in 1 .. 3 loop
dbms_output
拼写正如我所做的那样,而不是dpms_output
。
您正在选择多行作为定义为单行的类型。这将引发TOO_MANY_ROWS异常。同样,如果此查询返回0行,则将引发NO_DATA_FOUND异常。
如果要选择所有内容然后循环显示值,可以使用BULK COLLECT。对于这种情况来说,这太过分了。请注意,我不假设查询将返回的值的数量。
declare
cursor c_emp is
select employee_id, last_name, job_id, salary
from employees
where salary > 10000
and job_id like '%SA\_%N' ESCAPE '\';
type t__emp is table of c_emp%rowtype index by binary_integer;
t_emp t__emp;
begin
open c_emp;
fetch c_emp bulk collect into t_emp;
close c_emp;
for i in t_emp.first .. t_emp.last loop
dbms_output.put_line( i.employee_id || ' '
|| i.last_name || ' '
|| i.job_id || ' '
|| i.salary );
end loop;
end;
/
语法突出显示道歉。 Google Prettify在SQL markdown中的转义单引号上存在错误。