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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PL / SQL第一个最后的存在 - (不能显示表格内容)相关的知识,希望对你有一定的参考价值。

首先,我已经反复阅读了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名称

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

谢谢。丹尼尔

答案

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

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

另一答案

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

对于多列。

以上是关于PL / SQL第一个最后的存在 - (不能显示表格内容)的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 不存在查询

PL/SQL 触发器插入下一个值

PL/SQL:如何根据列值插入

imp命令导入dmp文件,提示成功无警告,但是在pl sql 查询,提示表不存在,是怎么回事?

PL/SQL 块以显示表详细信息

检查表[pl / sql block]中是否存在行的正确方法