SQLSTATE和SQLCODE在Big Query中是等效的



我正在阅读Teradata的存储过程文档中的SQLSTATE和SQLCODE。我正在尝试将Teradata的存储过程迁移到云。在Big query中,这些等价物是什么?

首先,不再建议使用SQLCODE。引用Teradata文档:

符合ANSI

SQLCODE不符合ANSI/ISO SQL:2011。SQLCODE在ANSI/ISO SQL-92标准中被弃用,在SQL:2011标准中没有定义。ANSI/ISO SQL委员会建议使用SQLSTATE(参见第91页的SQLSTATE(代替SQLCODE编写新的应用程序。

要将SQLSTATE映射到BigQuery,请参阅谷歌的迁移指南:

错误条件处理程序

Teradata在错误控制过程中对状态代码使用处理程序。在BigQuery中,错误处理是主控制流的核心功能,类似于其他语言为TRY ... CATCH块提供的功能。

Teradata                  | BigQuery
--------------------------+------------------------------------
DECLARE EXIT HANDLER FOR  | BEGIN ... EXCEPTION WHEN ERROR THEN 
SQLEXCEPTION              | 
|
SIGNAL sqlstate           | RAISE message
|
DECLARE CONTINUE HANDLER  | Exception handlers that trigger for certain 
FOR SQLSTATE VALUE 23505; | error conditions are not used by BigQuery

Teradata的SQLSTATE变量与BigQuery中的@@error系统变量类似。在BigQuery中,更常见的是使用审计日志或INFORMATION_SCHEMA视图来调查错误。

还有:

Teradata错误代码和BigQuery错误代码不同。BigQuery提供REST API,主要依赖于HTTP状态代码和详细的错误消息。

如果您的应用程序逻辑当前正在捕获以下错误,请尝试消除错误源,因为BigQuery不会返回相同的错误代码。

  • SQLSTATE = '02000'-";未找到行">
  • CCD_ 12-";基数违反(唯一索引(">
  • CCD_ 13-";数据违规(数据类型(">
  • CCD_ 14-";"违反约束">

很明显,SQLSTATE与BigQuery中的任何内容都没有一一对应关系,因此您需要根据上述信息重写一些代码。

最新更新