Эквивалент SQLSTATE и SQLCODE в Big Query - PullRequest
0 голосов
/ 14 июля 2020

Я просматривал SQLSTATE и SQLCODE в документации по хранимым процедурам Teradata. Я пытаюсь перенести хранимую процедуру Teradata в облако. Что для них эквивалентно в большом запросе?

1 Ответ

3 голосов
/ 14 июля 2020

Прежде всего, использование 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, поэтому вам придется переписать часть кода на основе приведенной выше информации.

...