Oracle 更新已填充的表的过程

Oracle 更新已填充的表的过程,oracle,plsql,Oracle,Plsql,我想创建一个过程,将新行添加到一个已经存在的表中。但是使用我已经创建的当前过程,我正在重写整个表。当前程序的代码为 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 procedure add_n_rows( n_rows in number) is l_

我想创建一个过程,将新行添加到一个已经存在的表中。但是使用我已经创建的当前过程,我正在重写整个表。当前程序的代码为

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 procedure add_n_rows(
n_rows in number)
is
  l_tab t_tf_tab := t_tf_tab();

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

     end loop;
end;

在这里,每次我重写整个
l\u选项卡
。我想更新已经更新的那个。建议我所需步骤的正确方法。谢谢这是因为您正在创建对象。您需要将对象的实例化版本作为参数传递到过程中:

create or replace procedure add_n_rows(
    Pn_rows in number
  , P_tab in out t_tf_tab ) is

begin
  for i in P_tab.count .. P_tab.count + Pn_rows
   loop
     P_tab.extend;
     P_tab(l_tab.last) := t_tf_row(i, 'Description for '|| i);    
   end loop;
end;
我已经声明了
p_tab
作为OUT参数,这意味着您可以修改它。如果不想这样做,请删除“out”并声明一个类型为
t\u tf\u tab
的局部变量,然后可以对其进行更改

然后可以单独调用它,例如:

declare
   l_tab t_tf_tab := t_tf_tab();
begin
   l_tab.extend;
   l_tab(l_tab.last) := t_tf_row(1. 'Hello');
   add_n_rows(3, l_tab);
end;

当我运行这个过程时,我得到了以下错误<代码>PLS-00363:表达式“P_TAB”不能用作分配目标Ooops,是的,这会发生;我已经修复了它。当按指示调用该过程时,将错误
下标超出计数
@BenI已将其更改为@user3020454。。。我怀疑你是否需要在以这种方式对对象做了一些事情之后调用过程,但是,你需要以你需要的方式调用它。。。这与手术本身无关,谢谢。它在工作。最后一个疑问。如何调用
l_选项卡检查过程是否执行。