Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 初始化oracle集合时出错_Sql_Oracle_Plsql - Fatal编程技术网

Sql 初始化oracle集合时出错

Sql 初始化oracle集合时出错,sql,oracle,plsql,Sql,Oracle,Plsql,我有以下自我包含的代码,它给出了以下错误。我似乎找不到初始化集合的位置 create or replace type address_type is object ( address_line varchar2(100), city varchar2(100), state varchar2(100) ) / create or replace type emp_rec_type is object ( emp_name

我有以下自我包含的代码,它给出了以下错误。我似乎找不到初始化集合的位置

create or replace type address_type is object 
( 
  address_line varchar2(100),
  city    varchar2(100), 
  state   varchar2(100)
)
/
create or replace type emp_rec_type is object
        (
                emp_name        varchar2(100),
                addr_rec        address_type
        )
 /
 create or replace type emp_arr is table of emp_rec_type
 /
 create table employees
 (
        emp_name varchar2(100),
        addr_rec address_type
 )
 /

insert into employees values ( 'dave', address_type ( '30 br','br','nj'));
commit;
-- Create a function to return an array
create or replace function get_emp_rec ( p_name in varchar2 )
return
        emp_arr
is
    i       integer;
    l_arr   emp_arr := emp_arr();
begin
    i := 1;
    l_arr.extend;

    l_arr(l_arr.last).emp_name := 'a';
    l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
    return l_arr;
end;
/
从表中选择emp\u名称(获取emp\u rec('dave')) *第1行错误:ORA-06530:引用未初始化的复合ORA-06512:位于“DBADMIN.GET\u EMP\u REC”行 二十二


您必须在集合中初始化emp_rec_类型

create or replace type address_type is object 
( 
  address_line varchar2(100),
  city    varchar2(100), 
  state   varchar2(100)
)
/
create or replace type emp_rec_type is object
        (
                emp_name        varchar2(100),
                addr_rec        address_type
        )
 /
 create or replace type emp_arr is table of emp_rec_type
 /
 create table employees
 (
        emp_name varchar2(100),
        addr_rec address_type
 )
 /

insert into employees values ( 'dave', address_type ( '30 br','br','nj'));
commit;
-- Create a function to return an array
create or replace function get_emp_rec ( p_name in varchar2 )
return
        emp_arr
is
    i       integer;
    l_arr   emp_arr := emp_arr();
begin
    i := 1;
    l_arr.extend;

    l_arr(l_arr.last).emp_name := 'a';
    l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
    return l_arr;
end;
/
这两条线

 l_arr(l_arr.last).emp_name := 'a';
 l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
换上这个衬里

l_arr(l_arr.last) := emp_rec_type('a', address_type ( 'a','b','c'));

您必须在集合中初始化emp_rec_类型

create or replace type address_type is object 
( 
  address_line varchar2(100),
  city    varchar2(100), 
  state   varchar2(100)
)
/
create or replace type emp_rec_type is object
        (
                emp_name        varchar2(100),
                addr_rec        address_type
        )
 /
 create or replace type emp_arr is table of emp_rec_type
 /
 create table employees
 (
        emp_name varchar2(100),
        addr_rec address_type
 )
 /

insert into employees values ( 'dave', address_type ( '30 br','br','nj'));
commit;
-- Create a function to return an array
create or replace function get_emp_rec ( p_name in varchar2 )
return
        emp_arr
is
    i       integer;
    l_arr   emp_arr := emp_arr();
begin
    i := 1;
    l_arr.extend;

    l_arr(l_arr.last).emp_name := 'a';
    l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
    return l_arr;
end;
/
这两条线

 l_arr(l_arr.last).emp_name := 'a';
 l_arr(l_arr.last).addr_rec := address_type ( 'a','b','c');
换上这个衬里

l_arr(l_arr.last) := emp_rec_type('a', address_type ( 'a','b','c'));