我们如何在 db2 中编写下面的伪代码,
If (Proc exists)
Drop Proc
Create Proc
Else
Create Proc
我在谷歌搜索后发现的一个解决方案是忽略返回码。我们有更优雅的方式来做到这一点吗?
谢谢
更新:在下面的答案的帮助下,我们写了一个如下的过程来删除程序
CREATE PROCEDURE SVCASNDB.DROPSP(IN P_SPECIFICNAME VARCHAR(128))
SPECIFIC DROPSP
P1: BEGIN
-- Drop the SP if it already exists
if exists (SELECT SPECIFICNAME FROM SYSIBM.SYSROUTINES WHERE SPECIFICNAME = trim(upper(p_SpecificName))) then
begin
DECLARE v_StmtString VARCHAR (1024);
SET v_StmtString = 'DROP SPECIFIC PROCEDURE SCHEMA.' || p_SpecificName;
PREPARE stmt1 FROM v_StmtString ;
EXECUTE stmt1;
end;
end if;
END P1
最佳答案
这个查询:
SELECT DISTINCT ROUTINENAME, RESULT_SETS, REMARKS
FROM SYSIBM.SYSROUTINES
WHERE ROUTINESCHEMA='<schema>' AND FUNCTION_TYPE NOT IN ('S', 'T')
(您在占位符处指定架构名称的位置) 为您提供架构中的所有过程。所以 Proc exists 部分只是该 View 上的 EXISTS 查询,具有正确的 proc 名称。
关于database - 在 db2 9.1 中删除过程/ View /表之前如何检查它是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355687/