database - principales - ¿Cómo verificar un procedimiento/vista/tabla existe o no antes de soltarlo en db2 9.1?
db2 tutorial (1)
¿Cómo escribimos a continuación pseudo código en db2,
If (Proc exists)
Drop Proc
Create Proc
Else
Create Proc
Una solución que encontré, después de googlear es ignorar los códigos de retorno. ¿Tenemos una forma más elegante de hacer esto?
Gracias
Actualización: con la ayuda de la respuesta a continuación, escribimos un procedimiento como el siguiente para eliminar los procedimientos
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
esta consulta:
SELECT DISTINCT ROUTINENAME, RESULT_SETS, REMARKS
FROM SYSIBM.SYSROUTINES
WHERE ROUTINESCHEMA=''<schema>'' AND FUNCTION_TYPE NOT IN (''S'', ''T'')
(donde especifica su nombre de esquema en el marcador de posición) le proporciona todos los procesos en un esquema. Entonces, la parte de Proc exists es simplemente una consulta EXISTS en esa vista con el nombre de proceso adecuado.