我期待很多投票,因为我认为这是一个愚蠢的问题,但在这里:
我正在尝试将数据插入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
类型的表变量,并且在尝试向其中插入数据之前就足以在块中声明它。
任何人都可以解释一下我做错了什么或者我理解中缺少什么?
由于
答案 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;