Spec-Zone.ru › MariaDB

SQLSTATE

SQLSTATE — это код, который идентифицирует условия ошибок SQL. Он состоит из пяти символов, которые могут быть числами или заглавными буквами ASCII. Значение SQLSTATE состоит из класса (первые два символа) и подкласса (последние три символа).

Существует три важных стандартных класса. Они все указывают, к какой логической группе ошибок относится условие. Они соответствуют определенному ключевому слову, которое можно использовать с DECLARE HANDLER. Кроме того, класс SQLSTATE определяет значение по умолчанию для свойств MYSQL_ERRNO и MESSAGE_TEXT.

  • '00' означает 'успех'. Он не может быть установлен каким-либо образом и может быть только прочитан через API.
  • '01' содержит все предупреждения и соответствует ключевому слову SQLWARNING. Значение по умолчанию для MYSQL_ERRNO — 1642, а значение по умолчанию для MESSAGE_TEXT — 'Необработанное пользователем предупреждение'.
  • '02' — это класс NOT FOUND. Значение по умолчанию для MYSQL_ERRNO — 1643, а значение по умолчанию для MESSAGE_TEXT — 'Необработанное пользователем условие отсутствия'.
  • Все остальные классы соответствуют ключевому слову SQLEXCEPTION. Значение по умолчанию для MYSQL_ERRNO — 1644, а значение по умолчанию для MESSAGE_TEXT — 'Необработанное пользователем исключительное условие'.

Подкласс, если он задан, указывает на конкретное условие или конкретную группу условий в рамках класса. Однако последовательность '000' означает 'нет подкласса'.

Например, если вы попытаетесь ВЫБРАТЬ из несуществующей таблицы, будет сгенерирована ошибка 1109 с SQLSTATE '42S02'. '42' — это класс, а 'S02' — подкласс. Это значение соответствует ключевому слову SQLEXCEPTION. При вызове FETCH для курсора, который уже достиг конца, генерируется ошибка 1329 с SQLSTATE '02000'. Класс — '02', и подкласс отсутствует (потому что '000' означает 'нет подкласса'). Его можно обработать с помощью обработчиков NOT FOUND.

Стандартное спецификация SQL гласит, что классы, начинающиеся с 0, 1, 2, 3, 4, A, B, C, D, E, F и G, зарезервированы для стандартно определенных классов, в то время как другие классы являются зависящими от поставщика. Она также гласит, что, когда класс стандартно определен, подклассы, начинающиеся с этих символов (кроме '000'), являются стандартно определенными подклассами, в то время как другие подклассы определяются поставщиком. Однако MariaDB и MySQL не строго соблюдают это правило.

Для чтения SQLSTATE конкретного условия, которое находится в зоне диагностики, можно использовать оператор GET DIAGNOSTICS: свойство называется RETURNED_SQLSTATE. Для пользовательских условий (SIGNAL и RESIGNAL) значение SQLSTATE должно быть установлено с помощью предложения SQLSTATE. Однако SHOW WARNINGS и SHOW ERRORS не отображают SQLSTATE.

Для пользовательских условий MariaDB и MySQL рекомендуют класс SQLSTATE '45000'.

'HY000' называется «общей ошибкой»: это класс, используемый для встроенных условий, не имеющих специфического класса SQLSTATE.

Неполный список кодов ошибок и соответствующих значений SQLSTATE можно найти на странице Коды ошибок MariaDB.

Контент, воспроизведенный на этом сайте, является собственностью соответствующих владельцев, и этот контент не просматривается предварительно MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/sqlstate/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API