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第一个最后的存在 - (不能显示表格内容)的主要内容,如果未能解决你的问题,请参考以下文章