CREATE OR REPLACE TYPE nvarchar2_list_type AS TABLE OF NVARCHAR2(100);
CREATE TABLE test_table(
id number primary key,
cars_list nvarchar2_list_type
)
NESTED TABLE cars_list STORE AS cars_list_storage_table;
insert into test_table(id, cars_list)
values(1, nvarchar2_list_type( 'AUDI', 'MERCEDES') );
以上所有操作都成功完成,表test_table中插入了1行,现在我写了这个函数:
create or replace function get_cnt
return number
as
ret_val number;
begin
SELECT cars_list.COUNT
INTO ret_val
from test_table where id = 1;
return ret_val;
end;
这会出错:ORA-00904: "CARS_LIST"."COUNT": invalid identifier
请告诉我这里有什么问题?
据我所知,必须使用COUNT
方法(from here)
答案 0 :(得分:5)
不,在这种情况下你不能使用count
方法。您有SQL嵌套表,count
方法仅用于PL / SQL集合。
要计算嵌套表元素的数量,您可以取消嵌套表或使用标量子查询:
Unnesting:
SQL> select id
2 , count(*) as cnt
3 from test_table t
4 cross join table(t.cars_list)
5 group by id
6 ;
ID CNT
---------- ----------
1 2
标量子查询:
SQL> select id
2 , (select count(column_value)
3 from table(t.cars_list)) as cnt
4 from test_table t
5 ;
ID CNT
---------- ----------
1 2
答案 1 :(得分:2)
使用
Select
Cardinality(cars_list) from test_table
答案 2 :(得分:1)
我无法解释为什么这不起作用,但确实如此:
select (select count(*) from table(cars_list))
into ret_val
from test_table
where id = 1;
答案 3 :(得分:1)
Oracle期望在其选择列表中使用列名或函数,但您所提供的是仅在集合上运行的方法中的集合构建。
您可以使用标量子查询
来实现相同的目标SELECT (select count(1) from table(cars_list)) as "COUNT"
FROM test_table
WHERE id = 1;