Прежде всего, использование SQLCODE
больше не рекомендуется. Цитата из документации Teradata :
Соответствие ANSI
SQLCODE
не соответствует требованиям ANSI / ISO SQL: 2011. SQLCODE
устарел в стандарте ANSI / ISO SQL -92 и не определен в стандарте SQL: 2011. Комитет ANSI / ISO SQL рекомендует писать новые приложения с использованием SQLSTATE (см. SQLSTATE
на стр. 91 ) вместо SQLCODE
.
Для сопоставления 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 различны. Предоставляя REST API, BigQuery в первую очередь полагается на коды состояния HTTP и подробные сообщения об ошибках.
Если в вашем приложении logi c в настоящее время обнаруживаются следующие ошибки, попробуйте устранить источник ошибки, потому что BigQuery не будет возвращает те же коды ошибок.
SQLSTATE = '02000'
- «Строка не найдена» SQLSTATE = '21000'
- «Нарушение количества элементов (уникальный индекс)» SQLSTATE = '22000'
- «Нарушение данных (тип данных)» SQLSTATE = '23000'
- «Нарушение ограничений»
Понятно, что нет однозначного соответствия SQLSTATE
с любым содержимым BigQuery, поэтому вам придется переписать часть кода на основе приведенной выше информации.