2008-10-01 2 views
3

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

+2

IBM i 7.1 поддерживает оператор Create or Replace Procedure, который отбросит процедуру, если она уже существует, и затем создайте новую процедуру. – Dave 2011-04-07 16:49:33

ответ

1

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

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

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

1
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] 

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

+0

Не для DB2 for iSeries, который задан, так как вопрос помечен тегом ibm-midrange. – WarrenT 2012-03-06 23:46:22

0

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

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

DROP PROCEDURE xxx ; CREATE PROCEDURE XXX . . . ;

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

Смежные вопросы