Недопустимая таблица или объект при выполнении запроса к временной таблице (Pervasive SQL)

У меня есть 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 *, то, наконец, ошибка исчезнет. Должна быть ошибка в ссылке на таблицу.


person Rob    schedule 17.03.2011    source источник


Ответы (2)


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

person mirtheil    schedule 17.03.2011
comment
Когда я удаляю DROP TABLE, SP срабатывает один раз. Когда я запускаю его снова, он жалуется, что таблица уже существует. Когда я помещаю DROP TABLE прямо перед CREATE TABLE, он говорит: «Нет такой таблицы или объекта». Определенно что-то происходит с созданием/удалением временной таблицы. - person Rob; 17.03.2011
comment
Вы запускаете его дважды в одном и том же соединении или в разных соединениях? - person mirtheil; 17.03.2011
comment
Я запускаю его из Pervasive Control Center. Я загружаю документ SQL в другое окно и набираю exec ProcName(var1,var2). Кстати, я работаю с таблицей DEMODATA и получаю ту же самую проблему. - person Rob; 17.03.2011
comment
Я использовал тест ODBC. Позвольте мне попробовать ПКС. - person mirtheil; 17.03.2011
comment
Я тестировал V10 с помощью PCC и увидел ту же ошибку. Я попробовал это в ODBC Test с v10 и не увидел никаких ошибок. Я также попробовал это в PCC с v11 и не увидел никаких ошибок. Может быть что-то особенное для v10 PCC. Я вижу, что у вас есть решение, так что на данный момент это не имеет большого значения. - person mirtheil; 17.03.2011

Хорошо, я понял это. Хотя процедура должна работать нормально, на самом деле Pervasive рекомендует что-то вроде этого. используйте ВЫБРАТЬ В

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
person Rob    schedule 17.03.2011