mysql 연구 노트: 저장 프로시저

黄舟
풀어 주다: 2017-02-15 10:57:54
원래의
970명이 탐색했습니다.

use test;

drop table if exists t8;
CREATE TABLE t8(s1 INT,PRIMARY KEY(s1));

drop procedure if exists handlerdemo;

DELIMITER $$
CREATE PROCEDURE handlerdemo()
BEGIN
declare xx int default 4;
DECLARE oh_no condition for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='违反主键约束';
SET @X=1;
INSERT INTO t8 VALUES(1);
SET @X=2;
INSERT INTO t8 VALUES(1);
SET @X=3;
END
로그인 후 복사


저장 프로시저 호출


/* 调用存储过程*/
CALL handlerdemo();

/* 查看调用存储过程结果*/
SELECT @X,@info;
로그인 후 복사


경험:


1. 명령문 종결자

아마도 mysql은 저장 프로시저와 사용자 정의 함수를 하나의 명령문으로 간주하므로 저장 프로시저의 여러 명령문은 ";"으로 구분하여 재정의하면 됩니다. 터미네이터.

일반적으로 저장 프로시저가 시작되기 전에

delimiter //

저장 프로시저가 작성된 후 정의를 복원하는 것과 같이 새 종료자를 정의할 수 있습니다. delimiter;


2. 변수

MySQL 변수는 SQL SERVER와 동일하며 @X 형식이지만 선언이 필요하지 않고 사용할 수 있습니다. 곧장.

저장 프로시저에서 변수는 @일 필요는 없지만 선언해야 합니다. 그리고 이 명령문은 이 예와 같이 저장 프로시저(?)의 헤드에 배치되어야 합니다. 그렇지 않으면 오류가 보고됩니다. 정말 이상합니다. 한편으로는 변수를 선언하지 않고 사용할 수 있는 경우도 있고, 다른 한편으로는 선언 위치를 제한해야 하는 경우도 있는데, 이는 혼란스럽고 약간 캐주얼해 보입니다.

저장 프로시저 내부의 변수는 해당 범위가 저장 프로시저로 제한됩니다. 하지만 @가 붙은 변수는 세션과 연결에 걸쳐 있는 것처럼 보이고 전역 변수처럼 보입니까? 위의 예와 같습니다.


3. 조건 및 처리

통화 처리 조건을 정의합니다. 위 예시와 같습니다:


DECLARE oh_no condition for sqlstate '23000';
#DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @X2=1;
declare exit handler for oh_no set @info='违反主键约束';
로그인 후 복사


위 내용은 더 많은 관련 내용을 보시려면 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. )! 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!