如何将数据插入TABLE类型变量

时间:2015-08-25 13:43:41

标签: oracle oracle11g

我期待很多投票,因为我认为这是一个愚蠢的问题,但在这里:

我正在尝试将数据插入TABLE TYPE变量。我有一个预先存在的TABLE TYPE,定义为:

create or replace type m_code_object
 is object (m_code varchar2(25 char));

create or replace type m_code_tabletype
 is table of m_code_object;

和我想基于此定义并将数据插入的表格如下:

declare
    vtable m_code_tabletype;
begin
    insert into vtable values ('a');
    insert into vtable values ('b');
end;

现在,在SQL Developer中运行时,我会为这两行获得PL/SQL: ORA-00942: table or view does not exist

我的理解是这是一个m_code_tabletype类型的表变量,并且在尝试向其中插入数据之前就足以在块中声明它。

任何人都可以解释一下我做错了什么或者我理解中缺少什么?

由于

3 个答案:

答案 0 :(得分:8)

这是填充表格类型对象的方法:

declare
    vtable m_code_tabletype := m_code_tabletype();
begin
    vtable.extend;
    vtable(vtable.count) := m_code_object('a');
    vtable.extend;
    vtable(vtable.count) := m_code_object('b');
end;

答案 1 :(得分:1)

DECLARE
    c_varray SYS.ODCIVARCHAR2LIST;
BEGIN
    c_varray := SYS.ODCIVARCHAR2LIST();
    c_varray.EXTEND(2);
    c_varray(1) := '1';
    c_varray(2) := '2';
END;

或者

DECLARE
    c_varray SYS.ODCIVARCHAR2LIST;
BEGIN
    SELECT LEVEL BULK COLLECT INTO c_varray FROM DUAL CONNECT BY LEVEL <= 10;
END;

答案 2 :(得分:0)

有关表格类型here的详细说明。

试试这个:

 declare
    vtable m_code_tabletype;
    vrow m_code_object;     
begin
    vrow := m_code_object('a');
    vtable := m_code_tabletype(vrow);
    abs_test(vtable);
end;

为了将表类型传递给存储过程:

Create or replace procedure abs_test(mct IN m_code_tabletype)
AS
BEGIN
    FOR i in 1..mct.count
    LOOP
        dbms_output.put_line('hello' || to_char(mct.count));
    END LOOP;
END;