Oracle 从集合中选择计数

Oracle 从集合中选择计数,oracle,plsql,Oracle,Plsql,是否有一种方法可以捕获特定条件下收集表中的计数。 例如: SELECT COUNT(*) BULK COLLECT INTO v_cnt FROM tt_product WHERE region = 'NA'; 上面的查询抛出错误,表示: Error(649,13): PL/SQL: ORA-00942: table or view does not exist 如有任何见解,将不胜感激 谢谢首先,删除批量收集,您将获得单个值 第二,如果我没弄错的话,你说的是字体的收

是否有一种方法可以捕获特定条件下收集表中的计数。 例如:

SELECT  COUNT(*)
BULK COLLECT INTO v_cnt
FROM    tt_product 
WHERE   region = 'NA';  
上面的查询抛出错误,表示:

   Error(649,13): PL/SQL: ORA-00942: table or view does not exist
如有任何见解,将不胜感激

谢谢

首先,删除批量收集,您将获得单个值

第二,如果我没弄错的话,你说的是字体的收集

CREATE OR REPLACE T AS TABLE OF ...
然后用table关键字包装名称

首先,删除批量收集,您将获得单个值

第二,如果我没弄错的话,你说的是字体的收集

CREATE OR REPLACE T AS TABLE OF ...
然后用table关键字包装名称


首先将结果转储到临时表中,然后从那里开始计算

比如:

SELECT * BULK COLLECT INTO #TEMP
FROM tt_product
Where region = 'NA'

SELECT COUNT(*) FROM #TEMP
这是未经测试的,因此您可能需要对其进行一些操作才能使其正常工作。
我的示例是SQL Server,您必须找到ORACLE的等效项,因为我对它不太熟悉。

首先将结果转储到临时表中,然后从那里进行计数

declare

  b  l_number := new l_number(1,2,3,4); -- type L_number is table of number ;
  v1 number;
  v2 number;
begin 
 select count(*) into v1 from table(b);
 select CARDINALITY(b) into v2 from dual;
dbms_output.put_line(v1);
dbms_output.put_line(v2);
end;
比如:

SELECT * BULK COLLECT INTO #TEMP
FROM tt_product
Where region = 'NA'

SELECT COUNT(*) FROM #TEMP
这是未经测试的,因此您可能需要对其进行一些操作才能使其正常工作。
我的示例是SQL Server,您必须找到ORACLE的等效示例,因为我对它不太熟悉。

此链接讨论了批量收集的使用。没有一个示例与您的匹配,因为您的示例有错误。我了解男人。这是一次绝望的尝试,因为正常的插入失败。此链接讨论了批量收集的使用。没有一个示例与您的匹配,因为您的示例有错误。我了解男人。这是一次绝望的尝试,因为正常的插入失败了。实际上,Oracle不鼓励使用临时表。因此,尽管这在mssql中可能有效,但不建议将其用于Oracle有时我会遇到无法使用临时表的问题,在这些情况下,我使用的是永久性的“临时”表。只需创建一个真正的表,在使用前将其擦除即可。从技术上讲,它保留在数据库中,但本质上是空灵的。谢谢你。实际上,Oracle不鼓励使用临时表。因此,尽管这在mssql中可能有效,但不建议将其用于Oracle有时我会遇到无法使用临时表的问题,在这些情况下,我使用的是永久性的“临时”表。只需创建一个真正的表,在使用前将其擦除即可。从技术上讲,它保留在数据库中,但本质上是空灵的。
declare

  b  l_number := new l_number(1,2,3,4); -- type L_number is table of number ;
  v1 number;
  v2 number;
begin 
 select count(*) into v1 from table(b);
 select CARDINALITY(b) into v2 from dual;
dbms_output.put_line(v1);
dbms_output.put_line(v2);
end;