我正在阅读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中的任何内容都没有一一对应关系,因此您需要根据上述信息重写一些代码。