Snowflake Сохраненная процедура Копировать во временную таблицу - PullRequest
0 голосов
/ 13 июля 2020

Вопрос связан со Снежинкой и Снегом sql. Тем не менее, я пытаюсь в сохраненном pro c создать временную таблицу, а затем «скопировать» эту временную таблицу из хранилища azure blob. Я вручную выполнил инструкции snow sql, и они работают нормально. Заявление 1: CREATE TEMPORARY TABLE DB.TABLES.LINE_DETAILS_INCREMENTAL LIKE DB.TABLES.LINE_DETAILS;

Заявление 2:

COPY INTO DB.TABLES.LINE_DETAILS_INCREMENTAL FROM (SELECT * FROM @DB.BASE.Azure/S/LINE_DETAILS_INCREMENTAL )
force = false file_format = (type = csv field_delimiter = '|' encoding = 'Windows 1252' skip_header = 0);

Но когда я инкапсулирую это в сохраненный pro c и пытаюсь запустить его, выдается ошибка: - "JavaScript ошибка компиляции: Uncaught SyntaxError: Неожиданный идентификатор в SP_DELETE_LINE_DETAILS в 'var insert_clause =' КОПИРОВАТЬ В DB.TABLES.LINE_DETAILS_INCREMENTAL FROM (SELECT * FROM @ Feeds_DB.BASE.Azure = file_DB.BASE.Azure / c / LINE_DETA_DETA_TYPE_DETA_DETAILS '|' encoding = 'Windows1252' skip_header = 0) On_error = continue; '' позиция 288 ". Код сохраненного pro c: -

CREATE or replace procedure  "DB"."TABLES"."SP_DELETE_INSERT_3DAYS_INTO_LINE_DETAILS"()
returns varchar(1000)
language javascript
as
$$
try{
var create_clause = 'CREATE TEMPORARY TABLE DB.TABLES.LINE_DETAILS_INCREMENTAL LIKE DB.TABLES.PS_TRANSACTION_LINE_DETAILS;'
        var create_stmt  = snowflake.createStatement({sqlText: create_clause});   
        var create_res = create_stmt.execute();
        
        var insert_clause = 'COPY INTO DB.TABLES.LINE_DETAILS_INCREMENTAL FROM (SELECT * FROM @Tableau_Feeds_DB.BASE_TABLES.JDAStagingAzure/POS/PS_TRANSACTION_LINE_DETAILS_INCREMENTAL ) force = true file_format = (type = csv field_delimiter = '|' encoding = 'Windows1252' skip_header = 0) On_error = continue;'
        var insert_stmt = snowflake.createStatement({sqlText: insert_clause});  
        var insert_res = insert_stmt.execute();
        var select_clause = 'select distinct TO_CHAR(TO_DATE(CREATE_DATE)) as CREATE_DATE from DB.TABLES.LINE_DETAILS_INCREMENTAL order by CREATE_DATE';
        var select_stmt  = snowflake.createStatement({sqlText: select_clause});
        var select_res   = select_stmt.execute();
 while (select_res.next()) 
            {
            date_ip = select_res.getColumnValue(1);
            var desc_user_sql  = `delete from DB.TABLES.LINE_DETAILS where TO_DATE(CREATE_DATE) = :1;`
            var desc_user_stmt  = snowflake.createStatement({sqlText: desc_user_sql, binds: [date_ip]});

            var desc_user_sql2  = `INSERT INTO DB.TABLES.PS_TRANSACTION_LINE_DETAILS select * from DB.TABLES.PS_TRANSACTION_LINE_DETAILS_INCREMENTAL where TO_DATE(CREATE_DATE) = :1;`
            var desc_user_stmt2  = snowflake.createStatement({sqlText: desc_user_sql2, binds: [date_ip]});

            try{
                       desc_user_stmt.execute();
                       desc_user_stmt2.execute();
                  }
               catch(err)
                  {
                   return "Error inserting records: " +err;
                  }              
            }
            return "Data has been insert in success!";
        }
        
        catch(err){
               return "Error whileselecting Roles : " +err;
        }
return 0;
$$

Ответы [ 2 ]

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

Попробуйте изменить одинарные кавычки, как показано ниже

var insert_clause = `COPY INTO DB.TABLES.LINE_DETAILS_INCREMENTAL FROM (SELECT * FROM @Tableau_Feeds_DB.BASE_TABLES.JDAStagingAzure/POS/PS_TRANSACTION_LINE_DETAILS_INCREMENTAL ) force = true file_format = (type = csv field_delimiter = '|' encoding = 'Windows1252' skip_header = 0) On_error = continue;`

https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#line -продолжение

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

Думаю, проблема в том, что вы используете одинарные кавычки как для начала / конца строки, так и внутри самой строки.

Например, у вас есть следующая фраза в вашей строке :

encoding = 'Windows1252'

Я бы предложил экранировать дополнительные кавычки с помощью backsla sh, например:

encoding = \'Windows1252\'

Сделайте это для всех дополнительных кавычек, и все будет в порядке.

Сообщите мне, если у вас все еще будут проблемы после этого!

...