0

このエラーの原因がわかりません。I 1)オブジェクトを次のように作成しました

  CREATE OR REPLACE  TYPE opt_val_rec AS  OBJECT (
    parametervalue     VARCHAR2(1),
    PARAMETERID          varchar2(4000)
    );

2)テーブルタイプを次のように作成しました

create  OR REPLACE  type  OPTVAL_TAB as  table of OPTVAL_REC;

3)次のように手順を書きました

    Create or replace  procedure test_parm_val (id in varchar2 ,result out  varchar2) as
pos number:=0;
  test_paramval                                 OPTVAL_TAB:= OPTVAL_TAB (null);
paramval_ord   OPTVAL_TAB:= OPTVAL_TAB (null);


begin

for I in (select DISTINCT param_name from  param_tbl)
loop

test_paramval.extend(10);
POS :=POS+1;

test_paramval (POS).PARAMETERVALUE:= get_param_val_fnc(id,I.PARAM_NAME);
test_paramval(POS). parameterid:=I.PARAM_NAME;


End;

end test_parm_val

4) ORA-06530: Reference to uninitialized composite というエラーに直面している

助けてください。

4

1 に答える 1

1

試す

 Create or replace  procedure test_parm_val 
      (id in varchar2 ,result out  varchar2) as

     pos number:=1; 
     test_paramval OPTVAL_TAB:= OPTVAL_TAB ();
     paramval_ord   OPTVAL_TAB:= OPTVAL_TAB ();
     new_record opt_val_rec ;

begin

for I in (select DISTINCT param_name from  param_tbl)
loop

  --test_paramval (POS).PARAMETERVALUE:= get_param_val_fnc(id,I.PARAM_NAME);
  --test_paramval(POS). parameterid:=I.PARAM_NAME;

 ----------------------------------------------------------------
 --  commented out, it will work if "opt_val_rec" was RECORD
 --  new_record.PARAMETERVALUE:= get_param_val_fnc(id,I.PARAM_NAME);
 --  new_record.parameterid:=I.PARAM_NAME;
 ----------------------------------------------------------------
  new_record = opt_val_rec (get_param_val_fnc(id,I.PARAM_NAME),I.PARAM_NAME);
  test_paramval.extend(1);
  test_paramval(POS) := new_record;
  POS :=POS+1;  -- not sure why you had 10, I guess it's a misprint
End;

end test_parm_val

更新 申し訳ありませんが、opt_val_recがレコードではなくオブジェクトであることに気づきませんでした。ループ内にそのインスタンスを作成する必要があります new_record = opt_val_rec (get_param_val_fnc(id,I.PARAM_NAME),I.PARAM_NAME);

于 2012-12-12T15:30:30.823 に答える