У меня возникли проблемы с использованием переменных сеанса в качестве идентификаторов в Snowflake. Я просмотрел документы:
https://docs.snowflake.com/en/sql-reference/session-variables.html
https://docs.snowflake.com/en/sql-reference/identifier-literal.html
https://docs.snowflake.com/en/sql-reference/data-types-text.html
https://docs.snowflake.com/en/sql-reference/identifiers-syntax.html
Я могу заставить их примеры работать, но то, что мне кажется логическим применением представленных концепций, не работает. Вот пример, который работает (сначала установите вашу базу данных и схему в песочницу):
input:
set (table_n, column_n) = ('test', 'c1');
select $table_n, $column_n;
output:
$TABLE_N $COLUMN_N
test c1
input:
create or replace table identifier($table_n) (c1 number);
insert into identifier($table_n) (c1) values (1), (2), (3);
select identifier($column_n) from identifier($table_n);
вывод:
c1
1
2
3
Пока все хорошо. Это все было снято прямо с документов. Однако, когда я пытаюсь использовать идентификаторы в несколько ином контексте, операция завершается неудачно с сообщением об ошибке.
input:
insert into identifier($table_n) (identifier($column_n)) values (5), (6), (7);
output:
SQL compilation error: syntax error line 1 at position 44 unexpected '('. syntax error line 1 at position 45 unexpected '$column_n'. syntax error line 1 at position 55 unexpected ')'.
input :
create or replace table identifier($table_n) (identifier($column_n) number);
вывод:
SQL compilation error: syntax error line 1 at position 56 unexpected '('. syntax error line 1 at position 74 unexpected ')'.
Я также получаю ошибки, когда в начале или конце идентификатора есть одинарная кавычка. Если мы вернемся к первому работающему примеру и просто изменим имя столбца на «c1», произойдет сбой.
input:
set (table_n, column_n) = ('test', '\'c1\'');
select $table_n, $column_n;
output:
$TABLE_N $COLUMN_N
test 'c1'
ввод:
create or replace table identifier($table_n) ("'c1'" number);
insert into identifier($table_n) ("'c1'") values (1), (2), (3);
вывод:
number of rows inserted
3
ввод:
select identifier($column_n) from identifier($table_n);
вывод:
SQL compilation error: error line 1 at position 18 invalid identifier '$column_n'
Любая помощь очень ценится. Мне бы очень хотелось понять, что происходит за кулисами, поэтому я действительно понимаю, как использовать Snowflake. Спасибо!