【问题标题】:Snowflake Stored procedure Copy into Temporary table雪花存储过程复制到临时表
【发布时间】:2020-11-03 02:34:40
【问题描述】:

问题与 Snowflake 和 Snowsql 有关。也就是说,我正在尝试在存储过程中创建一个临时表,然后从 azure blob 存储“复制到”这个临时表。 我手动执行了雪 sql 语句,它们工作正常。 声明一: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);

但是当我将它封装到一个存储过程中并尝试运行它时,它会给出错误:- “JavaScript 编译错误:未捕获的 SyntaxError:SP_DELETE_LINE_DETAILS 中的意外标识符,位于 'var insert_clause = 'COPY INTO DB.TABLES.LINE_DETAILS_INCREMENTAL FROM (SELECT * FROM @Feeds_DB.BASE.Azure/S/LINE_DETAILS_INCREMENTAL) force = true file_format = (type = csv field_delimiter = '|' encoding = 'Windows1252' skip_header = 0) On_error = continue;'' 位置 288"。 存储过程的代码是:-

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;
$$

【问题讨论】:

    标签: snowflake-cloud-data-platform java-stored-procedures snowsql


    【解决方案1】:

    尝试如下更改单引号

    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-continuation

    【讨论】:

      【解决方案2】:

      我认为你在这里遇到的问题是你使用单引号来开始/结束你的字符串,以及字符串本身。

      例如,您的字符串中有以下短语:

      encoding = 'Windows1252'
      

      我建议用反斜杠转义额外的引号,如下所示:

      encoding = \'Windows1252\'
      

      对所有额外的引号都这样做,你应该没问题。

      如果您之后仍然遇到问题,请告诉我!

      【讨论】:

      • 很高兴知道@Chris。谢谢你。上面的答案“Iqra Ijaz”起到了作用。但我确信转义字符对于未来的情况来说很好/知道。我有一堆从 SQL 服务器到雪花的迁移过程。
      • 不客气@junketsu。将字符串标识符更改为重音 ` 肯定也可以完成这项工作,请记住,如果您的代码在任何字符串中包含重音,那么这些也需要转义。 TLDR;始终转义任何可能提前中断您的字符串的字符
      猜你喜欢
      • 2021-10-01
      • 2021-06-22
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2021-08-25
      • 2020-05-23
      相关资源
      最近更新 更多