如何从DB2表中删除所有非null约束

时间:2017-12-21 11:14:39

标签: sql db2 db2-luw

我想从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的东西。

0 个答案:

没有答案