Как вставить данные VARIANT в таблицу Snowflake?

Используя эту таблицу:

CREATE TABLE t (i int PRIMARY KEY, j variant);

Я пытаюсь вставить в таблицу некоторый объект JSON, например.

INSERT INTO t (i, j) VALUES (1, object_construct('a', 1));

Однако это не удается с:

Ошибка SQL [2014] [22000]: ошибка компиляции SQL: Недопустимое выражение [OBJECT_CONSTRUCT('a', 1)] в предложении VALUES

Я могу обойти проблему с этим:

INSERT INTO t (i, j) VALUES (1, null);
UPDATE t SET j = object_construct('a', 1) WHERE i = 1;

Почему я не могу использовать OBJECT_CONSTRUCT в выражении INSERT?

Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
1
0
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Инструкция предлагает использовать INSERT.. SELECT:

Чтобы вставить данные VARIANT напрямую, используйте IIS (INSERT INTO ... SELECT).

Т.е. это работает:

INSERT INTO t (i, j) SELECT 1, object_construct('a', 1);

Однако он не предлагает никаких объяснений в отношении ограничения или того, почему необходим этот конкретный обходной путь.

Ответ принят как подходящий

ВСТАВИТЬ В... ЗНАЧЕНИЯ:

Некоторые выражения нельзя указывать в предложении VALUES. В качестве альтернативы укажите выражение в предложении запроса. Например, вы можете заменить: INSERT INTO table1 (ID, varchar1, variant1) VALUES (4, 'Fourier', PARSE_JSON('{ "key1": "value1", "key2": "value2" }')); с: INSERT INTO table1 (ID, varchar1, variant1) SELECT 4, 'Fourier', PARSE_JSON('{ "key1": "value1", "key2": "value2" }');

ЦЕННОСТИ:

<expr> Каждое выражение должно быть константой или выражением, которое может быть оценено как константа во время компиляции оператора SQL. Большинство простых арифметических выражений и строковых функций могут быть вычислены во время компиляции, но большинство других выражений — нет.

Другие вопросы по теме