Oracle - 迭代表并检查属性中的值

roy*_*att 1 sql oracle plsql cursor

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

select table_name from all_tab_cols
where column_name = 'MY_COLUMN'
and owner='ADMIN'
Run Code Online (Sandbox Code Playgroud)

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

伪代码:

for table in X:
    if MY_COLUMN !='Y' or MY_COLUMN !='N':
        print table
Run Code Online (Sandbox Code Playgroud)

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

Wou*_*ter 5

以下应该有效:

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;
Run Code Online (Sandbox Code Playgroud)

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