Процедура SQL iSeries - проверьте, существует ли уже - PullRequest
3 голосов
/ 01 октября 2008

У меня есть скрипт, который падает, если какая-либо из процедур, которые он пытается создать, уже существует. Как я могу проверить / удалить, если эта процедура уже создана?

Ответы [ 4 ]

1 голос
/ 05 января 2009
IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[Procedure_Name]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[Procedure_Name]

Я думаю, это поможет вам

1 голос
/ 01 октября 2008

Я бы предположил что-то вроде:

IF EXISTS
(
    SELECT *
    FROM SYSPROCS
    WHERE SPECIFIC_SCHEMA = ???
      AND SPECIFIC_NAME = ???
      AND ROUTINE_SCHEMA = ???
      AND ROUTINE_NAME = ???
)
    DROP PROCEDURE ???

Я не знаю, нужна ли вам на самом деле информация SPECIFIC_ * или нет, и я не знаю, как обрабатывать случаи, когда у вас есть две процедуры с одним и тем же именем, но разными сигнатурами вызовов, но, надеюсь, это даст вам право трек.

0 голосов
/ 23 марта 2014

DROP PROCEDURE xxx ; CREATE PROCEDURE XXX . . . ;

Включите DROP PROCEDURE в качестве первого утверждения в сценарии. Если вы работаете с RUNSQLSTM, используйте ERRLVL (20), чтобы позволить DROP дать сбой. Если вы запускаете «Выполнять сценарии SQL», используйте опцию «Игнорировать« Объект не найден »в DROP».

0 голосов
/ 12 сентября 2013

Вы можете проверить существование таким образом (примечание - убедитесь в правильности регистра):

SELECT *                       
FROM QSYS2/PROCEDURES          
WHERE PROCNAME LIKE 'your-procedure-name'
AND   PROCSCHEMA = 'your-procedure-library'   
...