8. MySQL 저장 프로세스
저장 프로세스는 SQL 문장 집합으로 저장 프로세스를 주동적으로 호출할 때 내부의 SQL 문장은 논리에 따라 실행된다.
1. 저장 프로세스 생성
매개 변수 저장 프로세스 없음
--
delimiter //
create procedure p1()
BEGIN
select * from t1;
END//
delimiter ;
--
call p1()
스토리지 프로세스의 경우 다음 세 가지 유형의 매개 변수를 수신할 수 있습니다.
--
delimiter \\
create procedure p1(
in i1 int,
in i2 int,
inout i3 int,
out r1 int
)
BEGIN
DECLARE temp1 int;
DECLARE temp2 int default 0;
set temp1 = 1;
set r1 = i1 + i2 + temp1 + temp2;
set i3 = i3 + 100;
end\\
delimiter ;
--
set @t1 =4;
set @t2 = 0;
CALL p1 (1, 2 ,@t1, @t2);
SELECT @t1,@t2;
주의: out inout은 저장 프로세스를 실행하기 전에 설명을 해야 합니다
1. 결과집
delimiter //
create procedure p1()
begin
select * from v1;
end //
delimiter ;
2. 결과 세트 + out 값
delimiter //
create procedure p2(
in n1 int,
inout n3 int,
out n2 int,
)
begin
declare temp1 int ;
declare temp2 int default 0;
select * from v1;
set n2 = n1 + 100;
set n3 = n3 + n1 + 100;
end //
delimiter ;
3. 사물
delimiter \\
create PROCEDURE p1(
-- , 0, error 1, warning 2
OUT p_return_code tinyint
)
BEGIN
--
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END;
-- sql
START TRANSACTION;
DELETE from tb1;
insert into tb2(name)values('seven');
COMMIT;
-- SUCCESS
set p_return_code = 0;
END\\
delimiter ;
유표
delimiter //
create procedure p3()
begin
declare ssid int; -- 1
declare ssname varchar(50); -- 2
DECLARE done INT DEFAULT FALSE;
--
DECLARE my_cursor CURSOR FOR select sid,sname from student;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open my_cursor;
xxoo: LOOP
fetch my_cursor into ssid,ssname;
if done then
leave xxoo;
END IF;
insert into teacher(tname) values(ssname);
end loop xxoo;
close my_cursor;
end //
delimter ;
동적 실행 SQL(SQL 주입 방지)
delimiter \\
CREATE PROCEDURE p4 (
in nid int
)
BEGIN
PREPARE prod FROM 'select * from student where sid > ?';
EXECUTE prod USING @nid;
DEALLOCATE prepare prod;
END\\
delimiter ;
2. 저장 프로세스 삭제
drop procedure proc_name;
3. 저장 프로세스 실행
--
call proc_name()
-- , in
call proc_name(1,2)
-- , in,out,inout
set @t1=0;
set @t2=3;
call proc_name(1,2,@t1,@t2)
pymysql 실행 저장 프로세스
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#
cursor.callproc('p1', args=(1, 22, 3, 4))
#
cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")
result = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
print(result)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.