【问题标题】:searching employees records by getting index input by user通过获取用户输入的索引来搜索员工记录
【发布时间】:2020-06-24 17:07:15
【问题描述】:

我的员工表少于 15 条记录,表有以下三列

EmpId Emp_name department

我想按用户获取索引值。根据这个索引值,plsql 代码块从 Employee 表中 1 和用户放置的索引之间的记录中获取名字值,并将其转换为表 索引结构。

1- Emp 1
2- Emp 2
3- Emp 3
4- Emp 4

我正在尝试通过仅将数组索引作为搜索条件来使用 plslq 数组来完成它。

【问题讨论】:

  • “索引值”是什么意思?行在表中的存储顺序,或者它们被查询返回的顺序,“EmpId”值的范围,还是其他什么?
  • 我想将数据加载到数组中,然后从数组中取出我想从索引 1 搜索到 '&indexbyuser'

标签: oracle plsql varray


【解决方案1】:

我已经尝试过类似的方法并且效果很好

DECLARE
    TYPE r_emp_type IS RECORD(
        emp_name employee.FNAME%TYPE
    ); 

    TYPE t_emp_type IS VARRAY(100) 
        OF r_emp_type;
    
    t_employee t_emp_type := t_emp_type();

    CURSOR c_emp IS 
        SELECT fname 
        FROM employee;
BEGIN
--    -- fetch data from a cursor
    FOR r_customer IN c_emp LOOP
        t_employee.EXTEND;
        t_employee(t_employee.LAST).emp_name := r_customer.fname;
    END LOOP;

    -- show all customers
    FOR l_index IN t_employee.FIRST..'&indexbyuser'
    LOOP
        dbms_output.put_line(t_employee(l_index).emp_name);
    END LOOP;

END;
/

【讨论】:

  • 最后,这与简单的 'SELECT EMP_NAME FROM EMP' 有何不同
  • 我必须通过数组来做到这一点
  • 除非您以某种方式对结果进行排序,否则索引将毫无意义,因为 Oracle 将以随机(或至少不可预测)的顺序返回结果。除非您强制执行,否则它们将不会按照输入顺序或任何其他特定顺序返回。限制索引的范围会限制返回的结果总数,但仅此而已。您可以在搜索中使用“ROWNUM
  • 为什么你“必须”通过 arry 做到这一点?尤其是考虑到有更简单的解决方案,而您的“所需”解决方案根本不会给出您似乎认为想要的结果。这似乎是另一个“x-y 问题”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多