如何在雪花中使用 SQL 添加错误处理

How to add error handling using SQL in snowflake

我在 snowflake 中使用 SQL 编写了存储过程代码,其中 t运行 分类 table 并通过首先复制 table 将新数据加载到 table来自源的数据,对其应用一些处理并加载到我们 t运行 的目标 table。

我添加了嵌套的 Begin 和 End 语句,以便尝试添加错误处理功能以及 If Else 语句,但其中 none 行得通。我想首先测试复制数据是否成功,如果是,那么代码应该 运行 第二个插入语句,这基本上将数据带到暂存区,我们在其中优化数据,我想添加第二个检查,检查行是否添加成功。最后我们在所有检查通过后复制到目标table。

CREATE OR REPLACE PROCEDURE DEV_NMC_ITEM_AND_PSYCHOMETRIC_DM.STAGE2B."SP_N_1Test"("STAGE_S3" VARCHAR(16777216), "STAGE_OUTPUT" VARCHAR(16777216))
RETURNS VARCHAR(16777216)
LANGUAGE SQL
EXECUTE AS CALLER
AS '
DECLARE
Stage_nm_s3 STRING;

begin

truncate table "STAGE2A"."T001_IRF_STUDENT_FORM_S3";

execute immediate ''COPY INTO "STAGE2A"."T001_IRF_STUDENT_FORM_S3" 
FROM ( select

a bunch of columns     

from @stage2a.''||:STAGE_S3||'') 
pattern= ''''.*_IRF_.*\\.csv''''
file_format = (type=csv, skip_header=1 )'';

begin
Insert into "STAGE2B"."T011_IRF_STUDENT_FORM_V001" (
   
a bunch of columns

SELECT

   a bunch of columns
    
from  "STAGE2A"."V001_IRF_STUDENT_FORM_T001";
    
    begin
execute immediate ''copy into @stage2a.''||:STAGE_OUTPUT||''/T001_IRF_STUDENT_FORM_S3
from (SELECT
   
a bunch of columns

 from "STAGE2B"."T011_IRF_STUDENT_FORM_V001")
    file_format = ( format_name = F_CSV type=csv compression = none)
header = True
SINGLE = FALSE 
OVERWRITE = TRUE
max_file_size=524288000 '';

return ''Load process completed for IRF_STUDENT_FORM_S3'';  
end;
end;
end;
';```

恐怕您需要将 SQL 语句包装到 Javascript-syntax 存储过程中才能使用 Try/Catch 块。

以下是关于该主题的更多解释:Error handling for stored procedures