【问题标题】:Stored procedure to insert values into a staging table from another table in snowflake将值从雪花中的另一个表插入临时表的存储过程
【发布时间】:2021-12-22 16:56:54
【问题描述】:

这是我创建的存储过程。但是当我尝试调用它时,我得到一个解析行错误


Create or replace procedure insert_into_staged1()
RETURNS STRING NOT NULL
LANGUAGE JAVASCRIPT
AS
$$
var sql_cmd = `Insert into staging_table(select xyz as xyz, abc as old_abc, case when 
               rx_code in ('1234','5432') and trim(split_part(upper(abc),'*',1)) in 
                 ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
            when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) else 
             coalesce(replace(abc,'\"','\''),'') end as abc_new from table2)`
 var sql = snowflake.createStatement({sqlText: sql_cmd});
 var result = sql.execute();
 return 'success';
 $$;

【问题讨论】:

  • 您可以在程序之外按原样运行查询吗?您收到的完整错误消息是什么?
  • 我尝试按原样运行 sql....它工作正常。但是当我把它放在存储过程中时,它会给出解析行错误。
  • 如果只是程序的问题,那么可能是需要转义的反斜杠。尝试在 sql_cmd 中将所有 \ 替换为 \\。

标签: javascript snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

试试这个:

Create or replace procedure insert_into_staged1()
RETURNS STRING NOT NULL
LANGUAGE JAVASCRIPT
AS
$$
var sql_cmd = `
Insert into staging_table select xyz as xyz, abc as old_abc, 
case 
when rx_code in ('1234','5432') and trim(split_part(upper(abc),'*',1)) in  ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) then 
             coalesce(replace(abc,'\"','\'''),'') end as abc_new from table2`;
           
 var sql = snowflake.createStatement({sqlText: sql_cmd});
 var result = sql.execute();
 return 'success';
 $$;

【讨论】:

    【解决方案2】:

    我尝试运行您的 SQL 语句,发现其中一种情况缺少 THEN。

    The corrected function added.
        --ORiginal 
        select xyz as xyz, abc as old_abc, case when 
                       rx_code in ('1234','5432') and trim(split_part(upper(abc),'*',1)) in 
                         ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
                    when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) else 
                     coalesce(replace(abc,'\"','\''),'') end as abc_new from table2
        
        
        --Corrected 
        select xyz as xyz, abc as old_abc, 
        case when rx_code in ('1234','5432') and trim(split_part(upper(abc),'*',1)) in ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
        when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) then 'Correction added'
        else coalesce(replace(abc,'\"','\''),'') end as abc_new from table2;
    
    
    
    create table staging_table AS
    select xyz as xyz, abc as old_abc
    ,case when rx_code in ('1234','5432') and  trim(split_part(upper(abc),'*',1)) in ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
    when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) then 'missing then'
    else coalesce(replace(abc,'\"','\''),'') end as abc_new 
    from table2;
    
    create or replace table  table2 (rx_code varchar2(100), split_part varchar2(100), xyz varchar2(120), abc varchar2(100));
    
    select
        column1,
        case
            when column1=1 then 'one'
            when column1=2 then 'two'
            else 'other'
        end as result
    from (values(1),(2),(3)) v;
    
    Create or replace procedure insert_into_staged1()
    RETURNS STRING NOT NULL
    LANGUAGE JAVASCRIPT
    AS
    $$
    var sql_cmd = `select xyz as xyz, abc as old_abc
    ,case when rx_code in ('1234','5432') and  trim(split_part(upper(abc),'*',1)) in ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1))
    when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) then 'missing then'
    else coalesce(replace(abc,'\\"','\\''),'') end as abc_new 
    from table2`
     var sql = snowflake.createStatement({sqlText: sql_cmd});
     var result = sql.execute();
     return 'success';
     $$;      
     
     
     call insert_into_staged1();
      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-03
      • 2021-08-01
      • 2022-01-24
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多