如何在弹出窗口中执行并获取光标输入?

时间:2019-08-18 06:46:23

标签: oracle plsql oracle-sqldeveloper

我想在oracle sql开发人员中创建一个cusrsor,在其中根据输入弹出窗口salary的数量显示员工报告。

我已经创建了游标,但是我不知道如何运行此游标以及如何使用用户弹出窗口获取输入?

declare
cursor c_emp is
select FIRST_NAME,SALARY,DEPARTMENT_ID from EMPLOYEES where 
SALARY>=10000;
v_name EMPLOYEES.FIRST_NAME%type;
v_sal EMPLOYEES.SALARY%type;
v_deptno EMPLOYEES.DEPARTMENT_ID%type;
 begin
 open c_emp;
    loop    
        fetch c_emp into v_name, v_sal, v_deptno;
        exit when c_emp%NOTFOUND;
        dbms_output.put_line(v_name||' '||v_sal||' '||v_deptno);
    end loop;
  close c_emp;
  end;

如何执行cursor并在弹出窗口中获取用户的薪水输入?它将显示每个员工的报告。

1 个答案:

答案 0 :(得分:1)

SQL Developer支持许多(但不是全部)古老的SQL * Plus命令集。受支持的集合包括&语法,用于标识替换变量。替换变量是一个占位符,当用户运行代码时会提示用户输入。

因此,您需要做的是编辑代码以使用此代码:

declare
  cursor c_emp is
    select FIRST_NAME,SALARY,DEPARTMENT_ID 
    from EMPLOYEES
    where SALARY >= &min_salary; -- substitution variable

  v_name EMPLOYEES.FIRST_NAME%type;
  v_sal EMPLOYEES.SALARY%type;
  v_deptno EMPLOYEES.DEPARTMENT_ID%type;
begin
 open c_emp;
    loop    
        fetch c_emp into v_name, v_sal, v_deptno;
        exit when c_emp%NOTFOUND;
        dbms_output.put_line(v_name||' '||v_sal||' '||v_deptno);
    end loop;
  close c_emp;
end;

这将提示用户在运行此程序时输入min_salary。在Oracle SQL Developer中,您可以像运行其他任何 ctrl + enter 语句或单击菜单栏上的绿色箭头一样运行此代码。

替换变量是占位符:它们没有存储在可寻址空间中。如果出于任何原因要这样做,则需要显式定义变量并将替代变量分配给它:

l_min_salary number := &min_salary;

然后,您需要更改其余代码以使用该变量。也许像这样:

declare
  cursor c_emp (p_min_sal number) is
    select FIRST_NAME,SALARY,DEPARTMENT_ID 
    from EMPLOYEES
    where SALARY >= p_min_sal; 

  l_min_salary number := &min_salary;-- substitution variable

  v_name EMPLOYEES.FIRST_NAME%type;
  v_sal EMPLOYEES.SALARY%type;
  v_deptno EMPLOYEES.DEPARTMENT_ID%type;
begin
 open c_emp (l_min_salary);
    loop    
        fetch c_emp into v_name, v_sal, v_deptno;
        exit when c_emp%NOTFOUND;
        dbms_output.put_line(v_name||' '||v_sal||' '||v_deptno);
    end loop;
  close c_emp;
end;