我已经声明了一个数字表格,如:
v_areas_hijas dbms_sql.number_table;
我填写表格,然后我试图通过以下方式获得该表格的大小:
select count(*) into v_counter from v_areas_hijas;
但我得到了:
错误(23,37):PL / SQL:ORA-00942:表或视图不存在
我该怎么办?
答案 0 :(得分:1)
显然,集合的count
方法有效。
declare
p_ids dbms_sql.number_table;
cnt NUMBER;
begin
p_ids(1) := 2;
p_ids(2) := 3;
p_ids(3) := 4;
dbms_output.put_line('cnt '||p_ids.count);
end;
/
返回
cnt 3
答案 1 :(得分:0)
v_areas_hijas
是一个本地集合变量(特别是它是一个关联数组),而不是可以在SQL中使用的关系表(不仅仅是count(*)
)。您可以使用table()
运算符将一些集合强制转换为关系表,尽管范围和兼容性存在一些限制,具体取决于类型,声明位置以及您拥有的Oracle版本(11g,12c R1和12c R2具有不同)功能。)
使用由create or replace type
创建的全局声明的SQL集合类型(或类似sys.ku$_xmlcolset_t
的现有类型),您可以执行以下操作:
declare
v_areas_hijas sys.ku$_xmlcolset_t := sys.ku$_xmlcolset_t(1,10,100);
v_counter integer;
begin
select count(*) into v_counter from table(v_areas_hijas);
dbms_output.put_line('Count = ' || v_counter);
end;