В хранимой процедуре Pervasive, как я могу удалить таблицу и воссоздать ее, используя переменную - PullRequest
0 голосов
/ 15 октября 2019

Это работает, если я использую фактическое имя таблицы, а не имя переменной (: TName) в двух операторах.

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

BEGIN

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

, но я получаю ошибку: Синтаксическая ошибка: DROP TABLE IF EXISTS <<??? >>?

Есть идеи как это исправить?

Ответы [ 3 ]

0 голосов
/ 16 октября 2019

Это то, что я наконец получил на работу:

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
0 голосов
/ 22 октября 2019

Вот еще один пример, который должен работать, хотя я еще нигде не проверял:

CREATE PROCEDURE Make_Snap(in :TName VARCHAR(20));
BEGIN
    Exec('DROP Table IF EXISTS "' + :TName + '"') ; 
    Exec('select * into "' +:TName + '" from Inventory_Mstr'); 
End
0 голосов
/ 15 октября 2019

Короткий ответ: ваш синтаксис неверен. 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

Ранее задаваемый вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...