PL / SQL第一个最后的存在 - (不能显示表格内容)

问题描述 投票:0回答:2

首先,我已经反复阅读了PL / SQL文档,没有任何帮助。其次,我用谷歌搜索了几个小时(通常被带到这里),但仍然无法解决这个问题。

我创建了一个索引表,似乎已经成功 - 至少它没有抛出任何错误......

DECLARE
CURSOR cur_emps IS
  SELECT employee_id, last_name, job_id, salary FROM employees ORDER BY employee_id;
  TYPE t_emp_rec IS TABLE OF cur_emps%ROWTYPE
  INDEX BY BINARY_INTEGER;
  v_emp_rec_tab  t_emp_rec;
BEGIN
  FOR emp_rec IN cur_emps LOOP
    v_emp_rec_tab(emp_rec.employee_id) := emp_rec;
  END LOOP;

但是,当我尝试显示索引表中的内容时。我失败了...

文档说这样做......

DECLARE
  CURSOR cur_emps IS
    SELECT employee_id, last_name, job_id, salary FROM employees ORDER BY employee_id;
  TYPE t_emp_rec IS TABLE OF cur_emps%ROWTYPE
  INDEX BY BINARY_INTEGER;
  v_emp_rec_tab  t_emp_rec;
BEGIN
  FOR emp_rec IN cur_emps LOOP
    v_emp_rec_tab(emp_rec.employee_id) := emp_rec;
  END LOOP;
  FOR i IN v_emp_rec_tab.FIRST..v_emp_rec_tab.LAST LOOP
    IF v_emp_rec_tab.EXISTS(i)
      THEN DBMS_OUTPUT.PUT_LINE(v_emp_rec_tab(i));
    END IF;
  END LOOP;
END;

......这给了我这个......

ORA-06550:第13行,第12列:PLS-00306:调用'PUT_LINE'ORA-06550时参数的数量或类型错误:第13行,第12列:PL / SQL:语句被忽略

代替

THEN DBMS_OUTPUT.PUT_LINE(v_emp_rec_tab(i));

。我尝试过emp_rec.last_name,v_emp_rec.last_name,cur_emps.last名称

...现在已经好几天了,有人可以帮忙吗?

谢谢。丹尼尔

oracle plsql indexof
2个回答
4
投票

您应该迭代索引表,如下所示:

l_idx := v_emp_rec_tab.first;
while (l_idx is not null) loop
    dbms_output.put_line( v_emp_rec_tab(l_idx).last_name );
    l_idx := v_emp_rec_tab.next(l_idx);
end loop;

否则,当表索引不连续时,您将收到异常。 见here


2
投票

v_emp_rec_tab是rowtype,并且无法调用

DBMS_OUTPUT.PUT_LINE(v_emp_rec_tab(i));

但你可以称之为:

DBMS_OUTPUT.PUT_LINE(v_emp_rec_tab(i).last_name);

只有一列,或者你可以连接如下:

DBMS_OUTPUT.PUT_LINE(v_emp_rec_tab(i).last_name||' '||v_emp_rec_tab(i).employee_id);

对于多列。

© www.soinside.com 2019 - 2024. All rights reserved.