我想从DB2中的表中的所有列中删除所有非null约束,而不必指定每个列名。
理想情况下,这将是一个函数,我可以将表名作为参数传递。通过sysibm.syscolumns获取非空列是完全正常的。
谢谢!
编辑:
一些背景知识:
DB:DB2 LUW v11.1.0.0
操作系统:Linux,Debian(Debian 4.9.51-1(2017-09-28)
我正在从另一个表创建一个表,需要将数据导入到新创建的表中。不幸的是,要导入的数据有时并不具有非空列所需的所有值,因此我必须在加载数据之前删除所有非空约束。
对于Oracle,我有以下内容:
function f_remove_mandatory(p_tbname in varchar2) return boolean is
l_tbname all_tab_columns.table_name%type;
l_AltTabTxt varchar2(220);
cursor c_AlterDlTab (p_tablename in varchar2) IS
select column_name
from user_tab_columns
where table_name = p_tablename
and nvl(nullable,'x') = 'N';
begin
l_tbname := UPPER(p_tbname);
for c1 in c_AlterDlTab (l_tbname) loop
execute immediate 'ALTER TABLE ' || l_tbname ||' MODIFY ' || c1.column_name || ' NULL';
end loop;
return true;
exception when others then return false;
end;
需要类似于DB2的东西。