Привязка динамического значения 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;

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