【问题标题】:In Pervasive stored procedure how can I drop a table and recreate it using a variable在普遍存储过程中,如何删除表并使用变量重新创建它
【发布时间】:2019-10-15 16:28:52
【问题描述】:

如果我在两个语句中使用实际表名而不是变量名 (:TName),则此方法有效。

CREATE PROCEDURE Make_Snap(in :TName VARCHAR(20));

BEGIN

   DROP TABLE IF EXISTS :TName;
   select * into :TName from Inventory_mstr;
END;

但我收到错误:语法错误:如果存在则删除表>?

知道如何解决这个问题吗?

【问题讨论】:

标签: stored-procedures pervasive


【解决方案1】:

简短的回答是您的语法不正确。 Pervasive 不支持这种方式的if 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

Previously asked question

【讨论】:

    【解决方案2】:

    这就是我最终要工作的:

    CREATE PROCEDURE Make_Snap(in :TName VARCHAR(20));
    
    BEGIN
        DECLARE :INDB  varchar(10); 
    
        set :INDB = (SELECT count(Xf$Name) FROM X$File WHERE Xf$Name = :TName);
            IF :INDB > '0'  
            THEN  
                Exec('DROP Table "' + :TName + '"') ;
                Exec('select * into "' +:TName + '" from Inventory_Mstr'); 
            ELSE
                Exec('select * into "' +:TName + '" from Inventory_Mstr'); 
            END IF;
     End
    

    【讨论】:

      【解决方案3】:

      这是另一个应该可以工作的例子,虽然我还没有在任何地方测试过:

      CREATE PROCEDURE Make_Snap(in :TName VARCHAR(20));
      BEGIN
          Exec('DROP Table IF EXISTS "' + :TName + '"') ; 
          Exec('select * into "' +:TName + '" from Inventory_Mstr'); 
      End
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多