外键的名称应该从动态系统表中获取。 这就是我现在所拥有的: “select'alter table'|| tabname ||'改变外键'|| constname ||'没有强制执行;'来自syscat.references“
以下代码输出此类查询:
alter table ADDRESS alter foreign key SQL161110091657410 not enforced;
alter table ADDRESS alter foreign key SQL161110091748740 not enforced;
alter table CLIENT alter foreign key SQL161110092705870 not enforced;
alter table CLINIC alter foreign key SQL161110091917520 not enforced;
alter table DOCTOR alter foreign key SQL161110091133120 not enforced;
....
现在我需要在存储过程中执行这些查询(取决于传递的参数)。以下代码不正确,我附上它只是为了说明问题:
db2 "create procedure fk_switch (sw IN varchar(3))
begin
declare var1 varchar(100), var2 varchar(100)
if sw='off' then @var1=select 'alter table ' ||tabname||' alter foreign key ' ||constname||' not enforced;' from syscat.references
execute @var1
elseif sw='on' then @var=select 'alter table ' ||tabname||' alter foreign key ' ||constname||' enforced;' from syscat.references
execute @var2
end if;
end;"
如何将选择结果写入变量?我可以在程序中执行它们吗?或者还有另一种解决方案?
是的,我知道,它可以通过使用bash来解决,但我的任务是创建一个存储过程:)
请分享一些关于db2存储过程的链接。
答案 0 :(得分:0)
答案是你可以在你的程序中编写SQL字符串(作为“var1”),并且可以使用EXECUTE
来运行它,但不能成功。使用存储过程无法解决您的问题。
通过查看SQL statements are supported in SQL routines(函数,过程),您会注意到ALTER TABLE
不受支持。