sqlstate与sqlcode等价

bbuxkriu  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(231)

我在teradata的存储过程文档中查看了sqlstate和sqlcode。我正在尝试将teradata的存储过程迁移到云。在大查询中,这些等价于什么?

zu0ti5jz

zu0ti5jz1#

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

符合ansi标准 SQLCODE 不是ansi/isosql:2011-compliant. SQLCODE 在ansi/iso sql-92标准中已弃用,并且未在中定义sql:2011 standard. ansi/isosql委员会建议使用sqlstate编写新的应用程序(参见 SQLSTATE 第91页)代替 SQLCODE .

用于Map SQLSTATE 要使用bigquery,请参阅google的迁移指南:

错误条件处理程序

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

这个 SQLSTATE teradata中的变量类似于 @@error bigquery中的系统变量。在bigquery中,使用审计日志或 INFORMATION_SCHEMA 意见。
还有:
teradata错误代码和bigquery错误代码是不同的。bigquery提供了restapi,主要依赖于http状态码和详细的错误消息。
如果应用程序逻辑当前正在捕获以下错误,请尝试消除错误源,因为bigquery不会返回相同的错误代码。 SQLSTATE = '02000' -“找不到行” SQLSTATE = '21000' -“基数冲突(唯一索引)” SQLSTATE = '22000' -“数据冲突(数据类型)” SQLSTATE = '23000' -“约束冲突”
很明显,这两者之间没有一一对应的关系 SQLSTATE 使用bigquery中的任何内容,因此需要根据上述信息重写一些代码。

相关问题