데이터 베이스 MySQL 튜토리얼 详解MySQL存储过程参数有三种类型(in、out、inout)_MySQL

详解MySQL存储过程参数有三种类型(in、out、inout)_MySQL

Jun 01, 2016 pm 01:22 PM
c 언어

bitsCN.com 一、MySQL 存储过程参数(in)
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

drop procedure if exists pr_param_in;
create procedure pr_param_in
(
in id int -- in 类型的 MySQL 存储过程参数
)
begin
if (id is not null) then
set id = id + 1;
end if;
select id as id_inner;
end;
set @id = 10;
call pr_param_in(@id);
select @id as id_out;
mysql> call pr_param_in(@id);

+----------+
| id_inner |
+----------+
| 11 |
+----------+
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 10 |
+--------+
可以看到:用户变量 @id 传入值为 10,执行存储过程后,在过程内部值为:11(id_inner),但外部变量值依旧为:10(id_out)。

二、MySQL 存储过程参数(out)
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

drop procedure if exists pr_param_out;
create procedure pr_param_out
(
out id int
)
begin
select id as id_inner_1; -- id 初始值为 null
if (id is not null) then
set id = id + 1;
select id as id_inner_2;
else
select 1 into id;
end if;
select id as id_inner_3;
end;
set @id = 10;
call pr_param_out(@id);
select @id as id_out;
mysql> set @id = 10;
mysql>
mysql> call pr_param_out(@id);

+------------+
| id_inner_1 |
+------------+
| NULL |
+------------+
+------------+
| id_inner_3 |
+------------+
| 1 |
+------------+
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 1 |
+--------+
可以看出,虽然我们设置了用户定义变量 @id 为 10,传递 @id 给存储过程后,在存储过程内部,id 的初始值总是 null(id_inner_1)。最后 id 值(id_out = 1)传回给调用者。

三、MySQL 存储过程参数(inout)
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

drop procedure if exists pr_param_inout;
create procedure pr_param_inout
(
inout id int
)
begin
select id as id_inner_1; -- id 值为调用者传进来的值
if (id is not null) then
set id = id + 1;
select id as id_inner_2;
else
select 1 into id;
end if;
select id as id_inner_3;
end;
set @id = 10;
call pr_param_inout(@id);
select @id as id_out;
mysql> set @id = 10;
mysql>
mysql> call pr_param_inout(@id);

+------------+
| id_inner_1 |
+------------+
| 10 |
+------------+
+------------+
| id_inner_2 |
+------------+
| 11 |
+------------+
+------------+
| id_inner_3 |
+------------+
| 11 |
+------------+
mysql>
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 11 |
+--------+
从结果可以看出:我们把 @id(10),传给存储过程后,存储过程最后又把计算结果值 11(id_inner_3)传回给调用者。 MySQL 存储过程 inout 参数的行为跟 C 语言函数中的引用传值类似。

通 过以上例子:如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。bitsCN.com

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

핫 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어의 Strlength의 의미 C 언어의 Strlength의 의미 Apr 03, 2025 pm 06:18 PM

strlen () 함수는 빈 문자 '\ 0': 1을 제외하고 문자열의 길이를 가져옵니다. 비어있는 문자가없는 문자 수를 계산합니다. 2. 빈 캐릭터가 발견 될 때까지 문자열을 반복하십시오. 3. 문자열의 길이를 반환, size_t를 입력하십시오.

C 언어의 의미는 무엇입니까? C 언어의 의미는 무엇입니까? Apr 03, 2025 pm 06:51 PM

OF OFORTATOR는 구조 또는 노조의 구성원을 가리키며 Expr.Member로 사용되며 회원의 가치에 액세스하거나 할당하는 데 사용됩니다.

수면은 C 언어에서 무엇을 의미합니까? 수면은 C 언어에서 무엇을 의미합니까? Apr 03, 2025 pm 06:33 PM

수면 함수는 C 언어로 사용하여 프로그램 실행을 위해 지정된 초를 일시 중지하고 구문은 수면 (서명되지 않은 int 초)입니다. 초가 0 인 경우 함수는 즉시 반환됩니다. 그렇지 않으면 함수가 지정된 초의 프로세스를 일시 중지하고 실제 일시 정지 시간을 반환합니다.

U16은 C 언어에서 무엇을 의미합니까? U16은 C 언어에서 무엇을 의미합니까? Apr 03, 2025 pm 06:42 PM

C 언어에서, U16은 비 음성 정수를 저장하는 데 사용되는 서명되지 않은 16 비트 정수를 나타냅니다. 특성은 다음과 같습니다. 1. 크기 : 16 비트; 2. 범위 : 0 ~ 65535; 3. 부호없는 : 양수 만 저장할 수 있고, 0은 최소값이고 65535는 최대 값입니다.

HTOC은 C 언어에서 무엇을 의미합니까? HTOC은 C 언어에서 무엇을 의미합니까? Apr 03, 2025 pm 06:45 PM

HTOC 함수는 16 진 문자열을 정수로 변환합니다. 문자열별로 문자열 문자를 스캔하고 문자열의 위치에 따라 각 16 진수를 적절한 전력으로 곱한 다음 최종 결과를 얻기 위해 축적합니다.

C 언어로 수익의 의미 C 언어로 수익의 의미 Apr 03, 2025 pm 06:54 PM

리턴 키워드는 C 언어로 사용하여 함수에서 값을 반환하고 구문은 반환 [expression]입니다. 함수의 리턴 값 (지정되지 않은 경우, 암시 적으로 반환), 함수 실행, 전달 값 및 핸들 오류를 지정하는 데 사용될 수 있습니다.

C 언어 기능의 개념 C 언어 기능의 개념 Apr 03, 2025 pm 10:09 PM

C 언어 기능은 재사용 가능한 코드 블록입니다. 입력, 작업을 수행하며 결과를 반환하여 모듈 식 재사성을 향상시키고 복잡성을 줄입니다. 기능의 내부 메커니즘에는 매개 변수 전달, 함수 실행 및 리턴 값이 포함됩니다. 전체 프로세스에는 기능이 인라인과 같은 최적화가 포함됩니다. 좋은 기능은 단일 책임, 소수의 매개 변수, 이름 지정 사양 및 오류 처리 원칙에 따라 작성됩니다. 함수와 결합 된 포인터는 외부 변수 값 수정과 같은보다 강력한 기능을 달성 할 수 있습니다. 함수 포인터는 함수를 매개 변수 또는 저장 주소로 전달하며 함수에 대한 동적 호출을 구현하는 데 사용됩니다. 기능 기능과 기술을 이해하는 것은 효율적이고 유지 가능하며 이해하기 쉬운 C 프로그램을 작성하는 데 핵심입니다.

교환은 C 언어에서 의미하는 바입니다 교환은 C 언어에서 의미하는 바입니다 Apr 03, 2025 pm 06:27 PM

C 언어에서 스왑 명령어는 두 가지 변수의 값을 교환하는 데 사용됩니다. Swap (x, y) : Swap (x, y) : Swap은 임시 변수 또는 비트 작업을 사용하여 x 및 y의 값을 달성 할 수 있습니다.

See all articles