如果字段属性not null,不是存不存在not null 下面就可以了,呵,不然必须要动态语句了. updateall_masttable a set columns_had=(select count(*) from all_tab_columns where table_name=a.table_name and nullable='N' ), columns_num=(select count(*) from all_tab_columns where table_name=a.table_name );
看文字说明和你的代码还是有些出入 你文字中说:搜索出一个字段NOT NULL res_columns_had直接加1 你的代码实现的是:找到一个NOT NULL 字段,然后查询表里是否有数据,有数据再加1 不知道你实际的需求是和哪个是一致的 按你文字中说的需求,1楼办法可行,代码还可简化 updateall_masttable a set (columns_had,columns_num)=( select NVL(sum(decode(nullable,'N',1)),0),count(*) from all_tab_columns where table_name=a.table_name );
下面就可以了,呵,不然必须要动态语句了.
updateall_masttable a
set columns_had=(select count(*) from all_tab_columns
where table_name=a.table_name and nullable='N' ),
columns_num=(select count(*) from all_tab_columns
where table_name=a.table_name );
你文字中说:搜索出一个字段NOT NULL res_columns_had直接加1
你的代码实现的是:找到一个NOT NULL 字段,然后查询表里是否有数据,有数据再加1
不知道你实际的需求是和哪个是一致的
按你文字中说的需求,1楼办法可行,代码还可简化
updateall_masttable a
set (columns_had,columns_num)=(
select NVL(sum(decode(nullable,'N',1)),0),count(*) from all_tab_columns
where table_name=a.table_name
);