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

时间:2015-04-15 14:06:52

标签: sql oracle plsql cursor

对于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中实现它?我想是吗?

2 个答案:

答案 0 :(得分:2)

以下应该工作:

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,打印表格。

答案 1 :(得分:0)

Wouter的版本对我不起作用。 不得不删除分号(Oracle数据库版本11.2.0.4.0)

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