我最近在try Snowflake的JavaScript存储过程,遇到了一个意外的行为.我创建了一个简单的存储过程,如Snowflake文档here所述.

下面是我创建的存储过程:

create procedure broken()
      returns varchar not null
      language javascript
      as
      $$
      var result = "";
      try {
          snowflake.execute( {sqlText: "Invalid Command!;"} );
          result = "Succeeded";
          }
      catch (err)  {
          result =  "Failed: Code: " + err.code + "\n  State: " + err.state;
          result += "\n  Message: " + err.message;
          result += "\nStack Trace:\n" + err.stackTraceTxt; 
          }
      return result;
      $$
      ;

此存储过程的目的是通过执行无效的SQL命令而故意失败,然后使用try—catch块捕获错误.

当我调用存储过程时,它确实返回预期的错误消息,指示失败:

call broken();

输出:

+---------------------------------------------------------+
| BROKEN                                                  |
|---------------------------------------------------------|
| Failed: Code: 1003                                      |
|   State: 42000                                          |
|   Message: SQL compilation error:                       |
| syntax error line 1 at position 0 unexpected 'Invalid'. |
| Stack Trace:                                            |
| Snowflake.execute, line 4 position 20                   |
+---------------------------------------------------------+

但是,在判断Snowflake的查询历史时,我注意到这个过程被标记为成功运行.这似乎是自相矛盾的,因为该程序明确地旨在失败.我希望它会被标记为执行失败.

有人能解释一下为什么snowflake认为这是一个成功的运行,尽管预期的失败?是否有不同的方法来处理此类情况并确保失败的存储过程执行正确地反映在查询历史记录中?任何见解或建议将不胜感激.谢谢你!

推荐答案

返回一个字符串"I HAVE FADENCE"是成功的,因为它发生了,where—as,实际上失败了:

create procedure actual_failure()
    returns varchar not null
    language javascript as
$$
    snowflake.execute( {sqlText: "Invalid Command!;"} );
    return "Succeeded";
$$
;

然后

call actual_failure();

实际上失败了.

enter image description here

Javascript相关问答推荐

如何让\w token 在此RegEx中表现得不贪婪?

脚本.js:3:20未捕获的类型错误:无法读取空的属性(读取addEventHandler)

materialized - activeIndex返回-1

从实时数据库(Firebase)上的子类别读取数据

按钮未放置在html dis位置

在JavaScript中声明自定义内置元素不起作用

Angular material 拖放堆叠的牌副,悬停时自动展开&

MathJax可以导入本地HTML文档使用的JS文件吗?

构造HTML表单以使用表单数据创建对象数组

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

Puppeteer上每页的useProxy返回的不是函数/构造函数

是否可以将异步调用与useState(UnctionName)一起使用

通过跳过某些元素的对象进行映射

Socket.IO在刷新页面时执行函数两次

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

在没有任何悬停或其他触发的情况下连续交换图像

如何在加载页面时使锚定标记成为焦点

KeyboardEvent:检测到键具有打印的表示形式