在PL/SQL中使用记录表

Tho*_*ten 12 oracle plsql

我在PL/SQL包中声明了以下类型:

TYPE t_simple_object IS RECORD (
   wert   NUMBER,
   gs     NUMBER,
   vl     NUMBER);

TYPE t_obj_table IS TABLE OF t_simple_object
  INDEX BY BINARY_INTEGER;
Run Code Online (Sandbox Code Playgroud)

然后我声明一个变量:

obj t_obj_table;
Run Code Online (Sandbox Code Playgroud)

但是,当我想使用变量时,我无法初始化或扩展它:

obj := t_obj_table ();
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

PLS-00222: no function with name 'T_OBJ_TABLE' exists in this scope
Run Code Online (Sandbox Code Playgroud)

如果我没有初始化它,我不能扩展它来添加一些日期

obj.EXTEND();
Run Code Online (Sandbox Code Playgroud)

给出另一个错误:

PLS-00306: wrong number or types of arguments in call to 'EXTEND'
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Pau*_*ulJ 22

你没有扩展一个由"某事"索引的表,你可以使用它......

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object
   INDEX BY BINARY_INTEGER; 

   my_rec t_simple_object;
   obj t_obj_table; 
BEGIN
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/
Run Code Online (Sandbox Code Playgroud)

要使用EXTEND语法,这个例子应该这样做......

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object; 

   my_rec t_simple_object;
   obj t_obj_table := t_obj_table(); 
BEGIN
   obj.EXTEND;
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/
Run Code Online (Sandbox Code Playgroud)

另见这个链接(问汤姆)


Rob*_*ebe 8

你不能扩展一个assosiative数组.只需为其指定值即可

declare
  TYPE t_simple_object IS RECORD (
    wert   NUMBER,
    gs     NUMBER,
    vl     NUMBER);

  TYPE t_obj_table IS TABLE OF t_simple_object INDEX BY BINARY_INTEGER;

  simple_object t_simple_object;
begin
  simple_object.wert := 1;
  simple_object.gs := 2;
  simple_object.vl := 3;
  obj(1) := simple_object;
end;
/
Run Code Online (Sandbox Code Playgroud)


Ton*_*ews 8

如果您不想使用关联数组(也就是索引表),则省略"INDEX BY BINARY_INTEGER"子句.您的代码然后工作正常:

declare 
    TYPE t_simple_object IS RECORD (
       wert   NUMBER,
       gs     NUMBER,
       vl     NUMBER);
    TYPE t_obj_table IS TABLE OF t_simple_object;
    obj t_obj_table;
begin  
    obj := t_obj_table ();
    obj.EXTEND();
end;
Run Code Online (Sandbox Code Playgroud)