簡體   English   中英

退出雪花存儲過程中的存儲過程和 RAISE 錯誤,如 sql server 中的 BREAK 或 RAISERROR

[英]Exit the Stored Procedure and RAISE error in Snowflake Store Procedure like BREAK or RAISERROR in sql server

我有一個執行多個查詢的存儲過程,對於每個查詢,我有一個 try 和 Catch 塊,如下所示。 如果有錯誤,我捕獲並插入到日志表中。

但是,無論遇到錯誤,我還需要 BREAK 並退出該步驟。 例如,如果我在第一個 try/catch 中有錯誤,它不應該執行第二個查詢並以 ERROR 退出。

代碼:

CREATE OR REPLACE PROCEDURE DIM_TABLES_REFRESH() 
    RETURNS STRING
    LANGUAGE JAVASCRIPT
    AS
    $$      
        var DB_SCHEMA = 'DB_DEV.DMS';
        
       
try {      
         /*****  Refresh DIM table  DIM_ACT_REVCODE_HIER ****/         
         var truncate_1 =` TRUNCATE TABLE   ${DB_SCHEMA}.DIM_ACT_REVCODE    `;
         snowflake.execute({sqlText: truncate_1, binds: [DB_SCHEMA]});
         
         var populate_1 = `INSERT INTO ${DB_SCHEMA}.DIM_ACT_REVCODE
                            (
                             ACT_REVCODE_HIER_KEY 
                            ,REV_CODE
                            ,REV_CODE_DESC
                             
                            )
                        SELECT
                             ROW_NUMBER() OVER ( ORDER BY REV_CODE ) AS ACT_REVCODE_HIER_KEY
                            ,REV_CODE
                            ,REV_CODE_DESC                          
                        FROM ${DB_SCHEMA}.OBIEE_ACT_REVCODE`;
         snowflake.execute({sqlText: populate_1, binds: [DB_SCHEMA]});
         
         var insert_status_sp1=`INSERT INTO STATS_QUERY_LOAD_STATUS_LOG values (Current_TIMESTAMP(),1,'ACT_REVCODE','Success','');`
            var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1}).execute();
            exec_sp1_status.next();
            
         var exec_status='Success';
        }
        catch (err) {
        exec_status =err;
        if (exec_status!='Success') {
            var insert_status_sp1=`INSERT INTO STATS_QUERY_LOAD_STATUS_LOG values (Current_TIMESTAMP(),1,'ACT_REVCODE','Failed',:1);`
            var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1,binds:[err.message]}).execute();
            exec_sp1_status.next();
                                    } 
        }   
        

try {      
         /*****  Refresh DIM table  ACTIVITY_HIER ****/         
         var truncate_2 =` TRUNCATE TABLE   ${DB_SCHEMA}.ACTIVITY_HIER  `;
         snowflake.execute({sqlText: truncate_2, binds: [DB_SCHEMA]});
         
         var populate_2 = `INSERT INTO ${DB_SCHEMA}.ACTIVITY_HIER
                            (
                             ACTIVITY_HIER_KEY
                            ,ACTIVITY_CD
                            ,ACTIVITY_DESC
                            ,ACTIVITY_CD
                              
                            )
                        SELECT
                             ROW_NUMBER() OVER ( ORDER BY ACTIVITY_CD ,ORG_CODE ) AS ACTIVITY_HIER_KEY
                            ,ACTIVITY_CD
                            ,ACTIVITY_DESC
                            ,ACTIVITY_CD
                            
                        FROM ${DB_SCHEMA}.OBIEE_ACTIVITY_HIER`;
         snowflake.execute({sqlText: populate_2, binds: [DB_SCHEMA]});
         
         var insert_status_sp1=`INSERT INTO STATS_QUERY_LOAD_STATUS_LOG values (Current_TIMESTAMP(),2,'ACTIVITY_HIER','Success','');`
            var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1}).execute();
            exec_sp1_status.next();
            
         var exec_status='Success';
        }
        catch (err) {
        exec_status =err;
        if (exec_status!='Success') {
            var insert_status_sp1=`INSERT INTO STATS_QUERY_LOAD_STATUS_LOG values (Current_TIMESTAMP(),2,'ACTIVITY_HIER','Failed',:1);`
            var exec_sp1_status = snowflake.createStatement({sqlText: insert_status_sp1,binds:[err.message]}).execute();
            exec_sp1_status.next();
                                    } 
        }

  return 'Success';
    $$;
CALL DIM_TABLES_REFRESH() ;             

我們可以使用如下所示的 THROW 語句通過報錯來停止和退出。

例如拋出錯誤;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM