Ошибка возврата данных хранимой процедуры TERADATA - PullRequest
0 голосов
/ 10 июня 2018

Я создал процедуру, которая выполняет следующие шаги:

  1. Удаляет последние 8 дней из исторической таблицы
  2. Затем мы добавляем обратно обновленные данные за последние 8 дней висторическая таблица
  3. Возвращает все данные исторической таблицы

Когда я добавляю последний шаг (номер 3), я получаю ошибку, показанную на скриншоте ниже.Не могли бы вы помочь мне понять, что я должен исправить, чтобы сделать эту работу?

enter image description here

REPLACE PROCEDURE SP_New_Procedure ()
DYNAMIC RESULT SETS 1 
SQL SECURITY OWNER

BEGIN 
------------Deleting last 8 days of data -------------------------------

   DELETE FROM History_Table
        WHERE Date BETWEEN CURRENT_DATE -INTERVAL '8' DAY(FORMAT 'YYYYMMdd') 
                        AND CURRENT_DATE -INTERVAL '1' DAY(FORMAT 'YYYYMMdd');

------------Inserting updated last 8 days of data------------------------

   INSERT INTO History_Table
   SELECT
      FinalTable.*
   FROM
      Data_Query AS FinalTable;


 ------------Return All values from updated History_Table-------------------

     SELECT * FROM History_Table;

END;

Спасибо!

Даниэль

1 Ответ

0 голосов
/ 10 июня 2018

Teradata следует стандартному SQL, вы должны использовать синтаксис курсора (это не фактический курсор, которого следует избегать при обработке данных) для возврата наборов результатов.Без курсора вы можете вернуть только одну строку переменных INTO.

REPLACE PROCEDURE SP_New_Procedure ()
DYNAMIC RESULT SETS 1 
SQL SECURITY OWNER

BEGIN 
------------Deleting last 8 days of data -------------------------------

   DELETE FROM History_Table
        WHERE Date BETWEEN CURRENT_DATE - 1 
                       AND CURRENT_DATE - 8

------------Inserting updated last 8 days of data------------------------

   INSERT INTO History_Table
   SELECT
      FinalTable.*
   FROM
      Data_Query AS FinalTable;


 ------------Return All values from updated History_Table-------------------

   BEGIN
      DECLARE cur CURSOR WITH RETURN ONLY FOR
      SELECT * FROM History_Table;

      OPEN cur; -- don't close it, otherwise there's no result
   END;

END;

Надеемся, History_Table разделен на этот столбец даты.

...