Привязка динамического значения Snowflake и постоянное значение
Мне нужно передать динамическое значение в качестве имени столбца в мою таблицу из цикла и постоянное значение. Мой фрагмент кода выглядит примерно так:While(res.next()){var columnname= res.getColumnValue(1);var stmt=insert into table1(column1,column2,column3)
select column1,'Too Long',
+ columnname +from table2
;\var result= \snowflake.createStatement(stmt);\ выполнение оператора
Получение ошибки как недопустимого идентификатора, если я передаю постоянное значение. Как мы можем этого добиться?
1 ответ
Похоже, в вашей процедуре есть синтаксическая ошибка. Будьте осторожны, избегая символа одиночной кавычки. Трудно отлаживать его, не видя фактический источник, но вот пример сценария, демонстрирующий, что с постоянным значением нет ничего особенного:
CREATE or REPLACE PROCEDURE TEST( VAR1 VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS '
var columnname = VAR1
for (var i = 0; i< 5; i++){
var stmt = snowflake.createStatement( { sqlText: "insert into table1(column1,column2,column3) select column1,''Too Long''," + columnname + " from table2" } );
res = stmt.execute();
}
return ''YES''
';
Чтобы протестировать описанную выше процедуру, я создаю две таблицы и вставляю строку в table2:
create table table1(column1 varchar,column2 varchar,column3 varchar);
create table table2(column1 varchar,columnX varchar);
insert into table2 values ('testing','secretcol');
Я вызываю процедуру с переменной "columnX", я не хотел писать более сложную процедуру для чтения имени столбца из 3-й таблицы:
call test( 'columnX' );
Когда я запрашиваю table1, я вижу 5 записей. Каждая строка содержит значения "тестирование", "слишком длинное" и "секреткол".
выберите * из таблицы1;