dbms_sql.number_table中的count(*)

时间:2018-02-07 16:14:52

标签: oracle plsql

我已经声明了一个数字表格,如:

v_areas_hijas   dbms_sql.number_table;

我填写表格,然后我试图通过以下方式获得该表格的大小:

select count(*) into v_counter from v_areas_hijas;

但我得到了:

  

错误(23,37):PL / SQL:ORA-00942:表或视图不存在

我该怎么办?

2 个答案:

答案 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;