外键名称应该从系统表中动态获取。 这就是我现在所拥有的: “选择‘改变表’||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 存储过程的链接。
最佳答案
答案是您可以在您的过程中编写 SQL 字符串(如“var1”)并能够使用 EXECUTE
来运行它,但不会成功。使用存储过程无法解决您的问题。
看看是什么SQL statements are supported in SQL routines (函数、过程)您会注意到 ALTER TABLE
不受支持。
关于sql - 创建一个启用/禁用(取决于传递的参数)所有外键的存储过程(DB2,V10.5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562237/