찾다
데이터 베이스MySQL 튜토리얼mysql 저장 프로시저_MySQL의 예외 처리 분석

예외 캡처 유형 및 처리 방법 정의:

  DECLARE handler_action HANDLER 
    FOR condition_value [, condition_value] ... 
    statement 
   
  handler_action: 
    CONTINUE 
   | EXIT 
   | UNDO 
   
  condition_value: 
    mysql_error_code 
   | SQLSTATE [VALUE] sqlstate_value 
   | condition_name 
   | SQLWARNING 
   | NOT FOUND 
   | SQLEXCEPTION  

여기서 몇 가지 참고할 사항이 있습니다.

a.condition_value [, Condition_value], 이는 여러 상황을 포함할 수 있음을 보여줍니다(대괄호는 선택 사항을 나타냄). 즉, 여러 상황을 대상으로 핸들러를 정의할 수 있음 . 상황에 따라 해당 작업을 수행합니다. 또한, 조건_값에는 위에 나열된 6가지 값이 포함될 수 있습니다.

1. mysql_error_code는 mysql의 에러 코드를 의미하며, mysql 자체적으로 정의한 값이다.

2. SQLSTATE [VALUE] sqlstate_value는 오류 코드와 유사한 5자의 문자열입니다. 핵심은 ANSI SQL, ODBC 등의 표준에서 인용된다는 점입니다. . , 자체적으로 사용하기 위해 mysql에서 완전히 정의한 위의 error_code와 달리 더 표준화되어 있습니다. 이는 첫 번째 것과 유사하며 mysql 데이터베이스 오류 코드 및 정보를 참조할 수도 있습니다.

3. Condition_name은 DECLARE...CONDITION 문을 사용하여 정의한 조건 이름입니다. 자체적으로 Condition_name을 정의하는 방법을 소개하겠습니다.

4. SQLWARNING, 오류: 1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR)과 같이 SQLTATE의 문자열이 '01'로 시작하는 오류를 나타냅니다.

5. 찾을 수 없음, 오류: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)
와 같이 SQLTATE의 문자열이 '02'로 시작하는 오류를 나타냅니다.

6. SQLSTATE의 문자열이 '00', '01' 또는 '02'로 시작하지 않는 오류를 나타내는 SQLEXCEPTION 여기서 '00'으로 시작하는 SQLSTATE는 실제로 오류가 아닌 성공적인 실행을 나타냅니다. 나머지 두 개는 위의 4번과 5번의 두 가지 상황입니다.

위 6가지 상황은 실제로 두 가지 범주로 나눌 수 있습니다.

첫 번째 유형은 1, 2, 3의 세 가지 방법을 포함하여 지정된 오류 상황을 처리하는 상대적으로 명확한 처리입니다.

다른 유형은 해당 유형의 오류를 처리하는 것으로, 세 가지 방법 4, 5, 6을 포함하여 특정 오류 그룹을 처리하는 것입니다. 이는 조건_값을 도입합니다. 주목해야 할 또 다른 점은 MySQL에는 기본적으로 자체 오류 처리 메커니즘이 있다는 것입니다(즉, 오류 처리 방법(핸들러)을 정의하지 않았습니다).

1. SQL WARNING 및 NOT FOUND를 처리하는 방법은 오류를 무시하고 계속 실행하는 것이므로 커서 예제에서 반복 조건으로 판단된 값에 대해 no_more_products=1 핸들러를 만들지 않으면 루프가 계속해서 켜집니다.

2. SQLEXCEPTION의 경우 기본 처리 방식은 오류 발생 시 종료하는 것입니다.

b.문, 이는 비교적 간단합니다. 특정 조건/오류가 발생하면 실행하려는 문은 SET var = value만큼 간단할 수 있습니다. 복잡한 여러 줄 문일 수도 있습니다. 여러 줄이 있는 경우 BEGIN ..... END를 사용할 수 있습니다. 여기에 문이 포함됩니다(이는 Delphi의 상황과 같습니다. 저장 프로시저도 여러 줄입니다. BEGIN .... END)도 마찬가지입니다.

c, handler_action, 이는 CONTINUE, EXIT, UNDO(계속, 종료 및 취소를 의미함)를 포함하여 위 명령문을 실행한 후 수행하려는 작업을 나타냅니다( Not 현재 지원됩니다). 실제로 위에서 언급한 두 가지 작업이 있는데 CONTINUE는 SQLWARNING 및 NOT FOUND의 기본 처리 방법이고 EXIT는 SQLEXCEPTION의 기본 처리 방법입니다.

또 다른:

condition_name: 명명된 조건
MySQL 오류 코드 또는 SQLSTATE 코드의 가독성이 너무 낮아 명명 조건이 도입되었습니다.

구문:

  DECLARE condition_name CONDITION FOR condition_value 
   
  condition_value: 
    SQLSTATE [VALUE] sqlstate_value 
   | mysql_error_code  


용도:

  # original 
  DECLARE CONTINUE HANDLER FOR 1216 MySQL_statements; 
   
  # changed 
  DECLARE foreign_key_error CONDITION FOR 1216; 
  DECLARE CONTINUE HANDLER FOR foreign_key_error MySQL_statements;

예:

  CREATE PROCEDURE sp_add_location 
    (in_location  VARCHAR(30), 
     in_address1  VARCHAR(30), 
     in_address2  VARCHAR(30), 
     zipcode    VARCHAR(10), 
     OUT out_status VARCHAR(30)) 
  BEGIN 
    DECLARE CONTINUE HANDLER 
      FOR 1062 
      SET out_status='Duplicate Entry'; 
   
    SET out_status='OK'; 
    INSERT INTO locations 
      (location,address1,address2,zipcode) 
    VALUES 
      (in_location,in_address1,in_address2,zipcode); 
  END; 

이상은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되길 바라며, 많은 응원 부탁드립니다.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.