Как изменить SQL-запрос Oracle на Snowflake - PullRequest
0 голосов
/ 14 октября 2019

Используя Oracle SQL, есть функция, отмеченная ниже, которая позволит вам создать «список» имен, телефонных номеров и т. Д., Не используя несколько запросов DUAL и UNION / UNION ALL, чтобы получить более одной записи. ,В приведенном ниже запросе создается список из 10 имен.

SELECT COLUMN_VALUE ИМЯ ПОЛЬЗОВАТЕЛЯ ИЗ TABLE (SYS.DBMS_DEBUG_VC2COLL («WARNER, JEFF», «MALITO, CARL», «MOODY, JEANNE», «PHILLIPS»,HUGH & KELLY ',' PATSANTARAS, VICTORIA ',' BROWN, ROLAND ',' RADOSEVICH, MIKE ',' RIDER, JACK ',' MACLEOD, LENARD ',' SCOTT, DAN '))

Однако,при попытке выполнить этот же запрос в Snowflake он не будет работать. Я получаю эту ошибку: Ошибка компиляции SQL: Неверный идентификатор SYS.DBMS_DEBUG_VC2COLL

Существует ли "версия снежинки" этого запроса, которую можно использовать?

1 Ответ

1 голос
/ 14 октября 2019

Вот некоторые параметры, которые вы можете увидеть, какие из них лучше всего подходят для вас.

  1. Это работает, если вы можете заставить свой SQL выглядеть похожим образом:

    SELECT $ 1:: VARCHAR AS column_value FROM (VALUES ('WARNER, JEFF'), ('MACLEOD, LENARD'), ('SCOTT, DAN'));

  2. Это также работает, если вы можетеполучить список в виде одной строки, разделенной конвейером или подобным:

    ВЫБРАТЬ значение :: VARCHAR AS column_value ОТ БЛОКИРОВКИ FLATTEN (INPUT => SPLIT ('WARNER, JEFF | MACLEOD, LENARD | SCOTT,DAN ',' | '));

  3. Если у вас есть строки в формате' a ',' b 'и вам больно делать одно из вышеперечисленных, я бысделать что-то вроде этого:

    ВЫБРАТЬ значение :: VARCHAR AS column_value ИЗ БЛОКИРОВКИ (INPUT => SPLIT (ARRAY_TO_STRING (ARRAY_CONSTRUCT ('WARNER, JEFF', 'MALITO, CARL', 'MOODY, JEANNE)'|'), '|'));

  4. Аналогично приведенным выше предложениям, вы можете попробовать это:

    SELECT VALUE :: VARCHAR as column_name FROM TABLE (FLATTEN (INPUT => ARRAY_CONSTRUCT ('WARNER, JEFF ',' MALITO, CARL ',' MOODY, JEANNE '), MODE =>' array '));

...