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 - 遍历表并检查属性中的值的主要内容,如果未能解决你的问题,请参考以下文章
遍历所有工作表并查找范围内的值。如果找到然后执行一些操作并转到