【问题标题】:How can I check if a stored procedure exists in PERVASIVE database before creating it?如何在创建存储过程之前检查 PERVASIVE 数据库中是否存在存储过程?
【发布时间】:2016-05-09 18:15:36
【问题描述】:

我想在 Pervasive 数据库中创建一个存储过程,但前提是它尚不存在。

我为 SQL Server 找到了一些东西:

IF NOT EXISTS (SELECT * 
               FROM sys.objects 
               WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('dbo.MyProc'))
   exec('CREATE PROCEDURE [dbo].[MyProc] AS BEGIN SET NOCOUNT ON; END')
GO

我在此链接How to check if a stored procedure exists before creating it 上找到了该代码。

所以我想要 Pervasive 的东西非常相似。

【问题讨论】:

    标签: stored-procedures exists pervasive-sql


    【解决方案1】:

    没有办法在 Pervasive 中的存储过程之外执行 IF NOT EXISTS 语法。您可以创建一个带有过程名称的过程,如果存在则将其删除。比如:

    CREATE PROCEDURE DropProcIfExists(in :procname char(20))
    AS
    BEGIN
     IF( EXISTS (SELECT xp$Name FROM X$proc WHERE Xp$Name = :procname) ) THEN
      Exec('DROP Procedure "' + :procname + '"') ;
     END IF;
    End#
    
    call DropProcIfExists ('myProc')#
    

    所以你的 SQL 应该是这样的:

    call DropProcIfExists('MyNewProc')#
    Create Procedure MyNewProc()
    AS
    BEGIN...
    

    【讨论】:

    • 没有。最简单的方法是创建过程,如果找到触发器/函数则删除它们。您需要更改 SELECT 查询以查找函数和触发器。
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多