Как избежать одиночной кавычки при динамическом создании sql в хранимой процедуре снежинки? - PullRequest
0 голосов
/ 10 июля 2020
 CREATE OR REPLACE PROCEDURE DEPARTMENT_STORED_PROC(table_name VARCHAR)
    returns variant not null
    
    language javascript
    as
    $$    
    
    var sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + "from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";
        snowflake.execute({sqlText: sql_cmd_ingest} );
$$

Это всего лишь фрагмент кода. Я получаю сообщение об ошибке при вводе одинарной кавычки перед '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/"

Execution error in store procedure DEPARTMENT_STORED_PROC: SQL compilation error: syntax error line 1 at position 70 unexpected ''@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/CLASSES_TABLE''. At Snowflake.execute, line 11 position 10

1 Ответ

1 голос
/ 10 июля 2020

Вам нужен пробел после TABLE_NAME и перед "from

var sql_cmd_ingest = "copy into DEPARTMENT.CLASSES." + TABLE_NAME + " from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/" + TABLE_NAME + "';";

Также я настоятельно рекомендую использовать заменяющие переменные JavaScript при построении операторов SQL внутри хранимых процедур. Вы можете использовать три разных типа кавычек для определения строк в JavaScript, двойной «одинарный» и обратный тик `.

Если вы используете обратный тик для начала и конца ваших строк, вы можете затем использовать любую JavaScript переменную внутри этой строки без завершения строка и объединение с +. Например:

var sql_cmd_ingest = `copy into DEPARTMENT.CLASSES.${TABLE_NAME} from '@DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/${TABLE_NAME}';`;

Это делает SQL намного более читаемым, особенно когда SQL длинный и многострочный.

Кроме того, сценическое имя не должно быть в кавычки в формате SQL. Вы должны удалить их:

var sql_cmd_ingest = `copy into DEPARTMENT.CLASSES.${TABLE_NAME} from 
 @DEPARTMENT.CLASSES.CLASSES_PREPROD_STAGE/${TABLE_NAME};`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...