如何遍历PLSQL Select语句的结果

11

我想要查找 Oracle 数据库中某个特定列中特定值出现的次数。该列在许多表格中都被使用,因此我将不得不多次运行查询,所以我不想逐个查询每个表格。我可以通过以下方式获得要搜索的表格列表:

Select table_name from all_tab_cols
   join all_tables using (table_name)
   where column_name = 'EmployeeId' and num_rows > 0
下一步是遍历表名列表,并输出包含EmployeeId列中特定值的每个表。例如,输出可能如下所示:

接下来的步骤是遍历该表名称列表并输出每个包含EmployeeId列中特定值的表。例如,输出可能类似于:

**Table Name   Column_name   # Rows for EmployeeId = '123456'**
Table 1        EmployeeId                    1
Table 2        EmployeeId                   12
etc.

我不是开发人员,也没有使用SQL脚本中的光标的经验,因此非常感谢任何帮助。


无关的,但是:连接应该在ownertable_name上进行,而不仅仅是table_name(或者使用user_tablesuser_tab_columns代替)。 - user330315
可能该列的名称为“'EMPLOYEEID'”,而不是“'EmployeeId'”。 - William Robertson
这实际上是一个早期的2000年代的PeopleSoft数据库,列名为'EMPLID'。我只是为了可读性而更改了名称。 - 1earldog
1个回答

23
尝试使用CURSOR FOR LOOP
可能看起来像下面这样(未尝试)。
BEGIN
FOR item IN
(Select table_name,column_name,num_rows  from all_tab_cols
   join all_tables using (table_name)
   where column_name = 'EmployeeId' and num_rows > 0)
LOOP
DBMS_OUTPUT.PUT_LINE
(item.table_name || '    ' || item.column_name ||'    '||item.num_rows);
END LOOP;
END;

您的脚本已成功运行,但没有产生任何可见输出。我正在使用Toad,但在任何数据网格选项卡上都看不到任何结果。 - 1earldog
3
您需要启用DBMS输出以查看结果。请参考以下链接:https://dev59.com/618f5IYBdhLWcg3wK__4 - Pavan Chandaka
也许你知道如何在循环内选择多行?或为每个项目填充临时表? - FrenkyB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接