【问题标题】:How to iterate through the result of a PLSQL Select如何遍历 PLSQL Select 的结果
【发布时间】:2018-09-13 02:11:48
【问题描述】:

我试图找出某个特定值在 Oracle 数据库的特定列中出现的次数。该列在几十个表中使用,我将不得不多次运行查询,所以我不想单独查询每个表。我可以获取要搜索的表格列表,例如:

Select table_name from all_tab_cols
   join all_tables using (table_name)
   where column_name = 'EmployeeId' and num_rows > 0

下一步是遍历该表名列表,并输出包含 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 代替
  • 可能该列被命名为'EMPLOYEEID' 而不是'EmployeeId'
  • 它实际上是 2000 年初的老式 PeopleSoft 数据库,列是“EMPLID”。为了便于阅读,我只是更改了名称。

标签: sql loops plsql


【解决方案1】:

尝试使用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,但在任何数据网格选项卡上都看不到任何结果。
  • 您必须启用 DBMS 输出才能看到结果。请通过链接stackoverflow.com/questions/24959889/…
  • 如果您想在循环中选择多行,也许您知道如何使用此技术?还是为每个项目填写临时表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2012-06-05
  • 1970-01-01
  • 2021-10-22
  • 2016-07-12
相关资源
最近更新 更多