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_选项卡检查过程是否执行。