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