Oracle/SQL-在另一个查询中使用查询结果作为参数-循环?
大家好,我想知道我是否可以创建一个表,列出其他表的记录计数。它将从表中获取这些表名。让我们假设我有一个如下的表列表Oracle/SQL-在另一个查询中使用查询结果作为参数-循环?,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,大家好,我想知道我是否可以创建一个表,列出其他表的记录计数。它将从表中获取这些表名。让我们假设我有一个如下的表列表 name --------- sports_products <-- contains 10 records house_products <-- contains 8 records beauty_products <-- contains 15 records 所以我想我需要做一些类似于这个伪代码的事情 select * from foreach t
name
---------
sports_products <-- contains 10 records
house_products <-- contains 8 records
beauty_products <-- contains 15 records
所以我想我需要做一些类似于这个伪代码的事情
select *
from foreach tableName in select name from table_list
select count(*) as numRecords
from tableName
loop
您可以使用一个函数,通过动态sql为您执行此操作 但是,请确保将其声明为authid current_user。您不希望任何人利用您的功能获得某种特权提升
create or replace function SampleFunction
(
owner in VarChar
,tableName in VarChar
) return integer authid current_user is
result Integer;
begin
execute immediate 'select count(*) from "' || owner || '"."' || tableName || '"'
INTO result;
return result;
end;
您可以使用一个函数,通过动态sql为您执行此操作 但是,请确保将其声明为authid current_user。您不希望任何人利用您的功能获得某种特权提升
create or replace function SampleFunction
(
owner in VarChar
,tableName in VarChar
) return integer authid current_user is
result Integer;
begin
execute immediate 'select count(*) from "' || owner || '"."' || tableName || '"'
INTO result;
return result;
end;
一种方法是简单地更新数据库统计信息,使用dbms_stats包或EM,然后
select num_rows
from all_tables
where table_name in (select name from table_list);
一种方法是简单地更新数据库统计信息,使用dbms_stats包或EM,然后
select num_rows
from all_tables
where table_name in (select name from table_list);
我认为Robert Giesecke的解决方案会很好 解决这个问题的一种更奇特的方法是使用dbms_xmlgen.getxml
参见示例:我认为Robert Giesecke的解决方案可以很好地工作 解决这个问题的一种更奇特的方法是使用dbms_xmlgen.getxml
请参阅示例:必须使用动态SQL-SQL不允许变量表示表名。必须使用动态SQL-SQL不允许变量表示表名。这将取决于统计数据的样本大小。如果100%的样本大小用于dbms_stat.gather_table_stats,则在进行任何更改之前,它都是准确的。如果使用较低的样本量,那么即使这样也不能保证。我不会依赖这个。例如,DBA可以锁定表的统计信息。这将取决于统计信息的样本大小。如果100%的样本大小用于dbms_stat.gather_table_stats,则在进行任何更改之前,它都是准确的。如果使用较低的样本量,那么即使这样也不能保证。我不会依赖这个。例如,DBA可以锁定一个表的统计信息。是的,这基本上是相同的原理。另外,DBMS_XmlGen也被声明为authid current_用户。所以也不涉及特权问题。是的,这基本上是相同的原则。另外,DBMS_XmlGen也被声明为authid current_用户。因此,也没有涉及特权问题。