【问题标题】: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