Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 4名员工的显示列具有类似Sau MAN的职务id,并且具有薪资>;10000_Oracle_Loops_For Loop_Plsql - Fatal编程技术网

Oracle 4名员工的显示列具有类似Sau MAN的职务id,并且具有薪资>;10000

Oracle 4名员工的显示列具有类似Sau MAN的职务id,并且具有薪资>;10000,oracle,loops,for-loop,plsql,Oracle,Loops,For Loop,Plsql,我想显示:employee id,employee name,job id,salary,对于4个工作id像sau MAN的员工,使用循环语句显示sau MAN,salary>10000,我写了这段代码,但我得到了一个错误 这个代码怎么了 DECLARE emp_name employees.last_name%type; emp_id employees.employee_id%type; sal employees.salary%type; jobid employees.j

我想显示:employee id,employee name,job id,salary,对于4个工作id像sau MAN的员工,使用循环语句显示sau MAN,salary>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:

这可以通过执行以下操作来实现:

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循环,则需要IN和a循环

    i 1..3的
    应为i in 1。。3环路

  • dbms\u输出
    的拼写与我所做的一样,而不是
    dpms\u输出

  • 您正在将多行选择到定义为单行的类型中。这将引发异常。同样,如果此查询返回0行,将引发“未找到数据”异常


  • 如果要选择所有内容,然后循环遍历这些值,可以使用。但在这种情况下,这是过分的。请注意,我不假设查询将返回的值的数量

    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;
    /
    

    抱歉语法突出显示。SQL标记中转义单引号上的Google Prettify有一个bug。

    …您会得到什么错误?至少
    1..3
    后面的
    循环
    丢失了。
    1..3
    之前的
    中的
    丢失了:@Toru您的意思是什么,我该怎么办do@BurhanKhalid我将errornow放入它的工作状态,但它不显示在输出i write set serveroutput OnSelect语句是否返回任何行?也许你的表中没有人有足够高的工资?没有,我之前检查过,它包含5名从事此工作和此工资的员工,但问题是我没有,但我在declare部分声明了select into变量中的值