在for循环中使用.count

时间:2013-12-19 06:15:59

标签: oracle plsql syntax-error

我是oracle的新手。我遇到过表函数。该函数的代码是

CREATE TYPE t_tf_row AS OBJECT (
id           NUMBER,
description  VARCHAR2(50));

CREATE TYPE t_tf_tab IS TABLE OF t_tf_row;

CREATE OR REPLACE FUNCTION get_tab_tf (p_rows IN NUMBER) RETURN t_tf_tab AS
l_tab  t_tf_tab := t_tf_tab();
BEGIN
  FOR i IN 1 .. p_rows LOOP
    l_tab.extend;
    l_tab(l_tab.last) := t_tf_row(i, 'Description for ' || i);
END LOOP;

RETURN l_tab;
END;

现在,我想创建一个使用for循环更新表类型的过程。 该程序的代码是

create or replace procedure add_n_rows(n_rows in number) is
  l_tab t_tf_tab := t_tf_tab();
begin

for i in t_tf_tab.count .. t_tf_tab.count + n_rows
loop
  l_tab.extend;
  l_tab(l_tab.last) := t_tf_row(i, 'Description for '|| i);

end loop;
end;

我收到错误,说应该声明COUNT。

ORA-06550: line 1, column 37:
PLS-00302: component 'COUNT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

你能帮助我使用正确的.count for for循环过程吗。谢谢

1 个答案:

答案 0 :(得分:2)

您需要使用变量名而不是类型。

create or replace procedure add_n_rows(
  n_rows     in     number)

is
    l_tab       t_tf_tab := t_tf_tab();     
begin

    for i in l_tab.count .. 1_tab.count + n_rows
    loop
      l_tab.extend;
      l_tab(l_tab.last) := t_tf_row(i, 'Description for '|| i);

    end loop;
end;
/