Oracle - 遍历表并检查属性中的值

Posted

技术标签:

【中文标题】Oracle - 遍历表并检查属性中的值【英文标题】:Oracle - iterate over tables and check for values in attribute 【发布时间】:2015-04-15 14:06:51 【问题描述】:

对于 X 中的所有表,而 X 是

select table_name from all_tab_cols
where column_name = 'MY_COLUMN'
and owner='ADMIN'

我需要检查 MY_COLUMN 列是否有除“Y”或“N”以外的其他值,如果有,请打印出表名。

伪代码:

for table in X:
    if MY_COLUMN !='Y' or MY_COLUMN !='N':
        print table

我猜如何在 PL/SQL 中使用游标来实现它?

【问题讨论】:

实现遍历表名,或实现检查列值,或两者兼而有之? 遍历给定sql返回的所有表并检查MY_COLUMN的列值。每个表都有这一列。 您可以使用隐式游标通过for 循环遍历所有表,在该循环中,您可以在EXECUTE IMMEDIATE 语句中使用INTO 子句查询带有SELECT COUNT(*) 的表指向一个整数变量。如果整数 > 0,则打印表格。 【参考方案1】:

以下应该可以工作:

DECLARE
  counter NUMBER;
  cursor c1 is 
    select table_name from all_tab_cols
    where column_name = 'MY_COLUMN'
    and owner='ADMIN';

BEGIN
  FOR rec IN c1 LOOP
    DBMS_OUTPUT.PUT_LINE(rec.table_name);
    EXECUTE IMMEDIATE 'select count(*) into :counter from '|| rec.table_name ||' where MY_COLUMN!= ''Y'' and MY_COLUMN!= ''N'' ';
    if counter > 0 then
      DBMS_OUTPUT.PUT_LINE(rec.table_name);
    end if;
  END LOOP;
END;

基本上,我们打开一个包含该列的所有表的游标,对具有不同于 Y 或 N 的值的行进行计数,如果该计数 > 0,则打印该表。

【讨论】:

【参考方案2】:

Wouter 版本不适合我。 必须删除分号(Oracle 数据库版本 11.2.0.4.0)

DECLARE counter NUMBER; BEGIN select count(*) into counter from LASTID; dbms_output.put_line(counter); END; /

【讨论】:

以上是关于Oracle - 遍历表并检查属性中的值的主要内容,如果未能解决你的问题,请参考以下文章

遍历数据透视表并删除相同的值

遍历所有工作表并查找范围内的值。如果找到然后执行一些操作并转到

是否可以遍历我的 SQL 数据库中的每个表并查找其他行中未使用的记录? (PK/FK检查)

遍历表并更改值时访问崩溃

如何遍历数据框的行并检查列行中的值是不是为 NaN

angularjs怎么遍历每个对象的属性的值