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

Oracle - iterate over tables and check for values in attribute

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

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

我需要检查 MY_COLUMN 列是否具有 'Y' 或 'N' 以外的值,如果有,则打印出 table 名称。

伪代码:

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

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

以下应该有效:

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;

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

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

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