Как работать с переменными таблицы с несколькими строками в БД SAP HANA? - PullRequest
0 голосов
/ 26 марта 2020

В SQL иногда проще и быстрее использовать табличные переменные.

Я знаю, что не могу использовать вставку в табличную переменную в БД HANA, но что было бы лучше, чтобы сделать что-то подобное ?

Я пытался использовать SELECT для заполнения переменной, но я не могу вставить несколько строк.

Нужно ли мне вместо этого использовать временную таблицу?

Я хотел бы иметь таблицу с некоторыми значениями, которые я создаю, как в приведенном ниже примере, который я использую для SQL, таким образом я могу использовать его позже в запросе:

Declare @temp table(Group Int, Desc nvarchar(100))
    insert into @temp (Group , Desc )
        Values (1,'Desc 1'), (2,'Desc2 2'),  (3,'Desc 3'),  (4,'Desc 4'),  (5,'Desc 5')

В HANA я могу создать переменную , но не может заполнить его несколькими строками: (

Есть ли лучший способ сделать это?

Большое вам спасибо.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Подход "UNION" - это один из вариантов добавления записей к данным, на которые указывает переменная таблицы.

Намного лучше использовать массивы для добавления, удаления и изменения данных и, наконец, преобразования массивов в табличные переменные с помощью функции UNNEST. Эта опция доступна уже много лет, даже с HANA 1.

В качестве альтернативы, SAP HANA 2 (я полагаю, начиная с SPS 03) предлагает дополнительные команды SQLScript для непосредственного INSERT, UPDATE и DELETE для табличных переменных. Документация описывает это в «Изменение содержимого переменных таблицы» . Обратите внимание, что эта функция имеет немного другой синтаксис для команд DML.

Начиная с SAP HANA 2 SPS 04, для этого предусмотрен еще один вариант синтаксиса: "SQL Операторы DML на Переменные таблицы". Наконец, этот файл выглядит как «обычный» SQL DML для табличных переменных.

С учетом этих параметров подход «union» - это последний параметр, который вам следует использовать в коде.

0 голосов
/ 27 марта 2020

Для тех, кто еще пытается найти об этом, я нашел «обходной путь», который заключается в использовании UNION ALL.

Я добавляю первую строку, затем делаю UNION в таблице и ДОБАВЛЯЮ вторая строка, как показано ниже:

tempTable = Select 1 as "Group", 'Desc' as "Desc" FROM DUMMY;
tempTable = SELECT "Group", "Desc" FROM :AcctClassificacao UNION ALL Select 2 as "Group",
            'Desc' as "Desc" FROM DUMMY ;

Select * from tempTable

В этом случае у меня будет результат:

Group   Desc
  1     Desc
  2     Desc

Я не знаю, является ли это лучшим способом сделать это в любом случае.

...