Неверная таблица или объект при выполнении запроса к временной таблице (Pervasive SQL) - PullRequest
0 голосов
/ 17 марта 2011

У меня есть SP, который вставляет записи во временную таблицу, затем выбирает записи и возвращает их.SQL такой:

Я устраняю неполадки, удаляя оператор INSERT INTO и минимизируя SQL.Виновником является SELECT * FROM # Worklist1.Не знаю, почему это не работает.Я обновил (только сейчас) до последней версии Pervasive server ver 10, если это поможет, но эта проблема была в 10.3 и все еще там.Должно быть что-то упущено.

CREATE PROCEDURE "Connect_Workflow"(
     :StartDate DATETIME, :EndDate DATETIME)
     RETURNS(Patient varchar(100) , 
        AccessionNo varchar(25)  
        );
BEGIN
    CREATE TABLE #WorkFlow1
        (Patient varchar(100) null, 
        AccessionNo varchar(25) null 
    );  
    INSERT INTO #Workflow1(
      SELECT 
        rtrim(p.LastName),--+ '^' + rtrim(p.FirstName) + isnull('^' + rtrim(p.Initial), ''),
        v.VisitID   -- equiv to EncounterID
    FROM visit v
    join patient p on v.patientnumber = p.patientnumber
    WHERE v.VisitYY = '99'
    );

    SELECT * FROM #WorkFlow1;
    DROP TABLE #Workflow1;


END

Обновление: после комментирования SELECT * FROM # Worklist1;это все еще дает неверную ошибку таблицы.Если я удаляю INSERT INTO и SELECT *, то, наконец, ошибка исчезает.Должна быть ошибка при ссылке на таблицу.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Удалить DROP TABLE # Workflow1;из вашего запроса.
Я считаю, что он удаляет таблицу, прежде чем SP возвращает данные.

0 голосов
/ 17 марта 2011

Хорошо, я понял это. Хотя процедура должна работать нормально, на самом деле Pervasive рекомендует что-то вроде этого. используйте SELECT INTO

CREATE PROCEDURE "Connect_Workflow"(
     :StartDate DATETIME, :EndDate DATETIME)
     RETURNS(Patient varchar(100) , 
        AccessionNo varchar(25)  
        );
BEGIN
    SELECT 
        rtrim(p.LastName),--+ '^' + rtrim(p.FirstName) + isnull('^' + rtrim(p.Initial), ''),
        v.VisitID   -- equiv to EncounterID
    FROM visit v
    INTO #Workflow1
    join patient p on v.patientnumber = p.patientnumber
    WHERE v.VisitYY = '99'
    );
    SELECT * FROM #WorkFlow1;
END
...