Oracle
 sql >> Base de données >  >> RDS >> Oracle

Procédure de mise à jour d'une table déjà renseignée

C'est parce que vous recréez l'objet. Vous devez passer une version instanciée de l'objet dans la procédure en tant que paramètre :

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;

J'ai déclaré P_tab en tant que paramètre OUT, cela signifie que vous pouvez le modifier. Si vous ne voulez pas le faire, supprimez "out" et déclarez une variable locale de type t_tf_tab , que vous pouvez ensuite modifier.

Vous pouvez ensuite l'appeler séparément, par exemple :

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;