>  기사  >  데이터 베이스  >  mysql 연구 노트: 저장 프로시저

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

黄舟
黄舟원래의
2017-02-15 10:57:54990검색

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)를 주목해주세요!



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:MySQL 백업 및 복원다음 기사:MySQL 백업 및 복원