Попытка запроса данных, где строка содержит одинарную кавычку - PullRequest
0 голосов
/ 13 января 2020

Попытка go просмотреть список значений, где может быть значение с одинарной кавычкой. Когда я пытаюсь передать его через функцию, она не работает.

Выдает ошибку,

Execution error in store procedure REPORT_PRESENTATION_DATA: SQL compilation error: parse error line 1 at position 164 near '<EOF>'. syntax error line 1 at position 158 unexpected 't'. At Statement.execute, line 90 position 41

Затем я добавляю myCommonValue = myCommonValue.replace ("'", "' '" ); но теперь получите ошибку,

JavaScript execution error: Uncaught TypeError: Cannot read property 'replace' of null in REPORT_PRESENTATION_DATA at ' myCommonValue = myCommonValue.replace("'","''");' position 36 stackstrace: REPORT_PRESENTATION_DATA line: 85

Вот пример кода:

CREATE OR REPLACE PROCEDURE MY_SNOWFLAKE_PROCEDURE()
RETURNS VARIANT
LANGUAGE JAVASCRIPT
AS
$$

    ...

    sqlText = ` SELECT fields FROM MYTABLE `;
    statement = snowflake.createStatement({ sqlText });
    const rs = statement.execute();

    let results = [];
    while (rs.next()) {
        let myColumnValue = rs.getColumnValue(1);
        myColumnValue = myColumnValue.replace("'","''");

        // Using the column value which could contain a single quote in the string,
        // get a second result set. IE: "gov't" may be the string value passed into Query_GroupValues
        sqlText = ` SELECT * FROM table(Query_GroupValues('${startdate}', '${enddate}', ARRAY_CONSTRUCT('${myColumnValue}'))) `;
        statement = snowflake.createStatement({ sqlText });
        const rsTableValue = statement.execute();

        if (statement.getRowCount() > 0) {
            let myValue = rsTableValue.getColumnValue(1);

            struct = {
                attributes: {
                    value: myValue
                }
            }

            results.push(struct);
        }
    }

    ...

$$;

1 Ответ

1 голос
/ 13 января 2020

Похоже, что myColumnValue был нулевым, когда вызывался метод replace (). Добавление охранника должно это исправить. Например: if (myColumnValue!=null) myColumnValue = myColumnValue.replace("'","''");

...