创建一个存储过程,启用/禁用所有外键(取决于传递的参数)(DB2,V10.5)

时间:2016-11-12 11:12:01

标签: sql linux stored-procedures db2 constraints

外键的名称应该从动态系统表中获取。 这就是我现在所拥有的: “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存储过程的链接。

1 个答案:

答案 0 :(得分:0)

答案是你可以在你的程序中编写SQL字符串(作为“var1”),并且可以使用EXECUTE来运行它,但不能成功。使用存储过程无法解决您的问题。

通过查看SQL statements are supported in SQL routines(函数,过程),您会注意到ALTER TABLE不受支持。