Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

매개 변수를 사용하여 MySQL에서 프로시저를 생성하시겠습니까?

<시간/>

IN 및 OUT을 사용하여 매개변수를 생성할 수 있습니다. IN은 입력 매개변수를 가져오는 데 사용하고 OUT은 출력에 사용할 수 있습니다.

구문은 다음과 같습니다.

DELIMITER //
CREATE PROCEDURE yourProcedureName(IN yourParameterName dataType,OUT
   yourParameterName dataType
)
BEGIN
yourStatement1;
yourStatement2;
.
.
N
END;
//
DELIMITER ;

먼저 테이블을 생성하겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table SumOfAll
   -> (
   -> Amount int
   -> );
Query OK, 0 rows affected (0.78 sec)

삽입 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오. 쿼리는 다음과 같습니다.

mysql> insert into SumOfAll values(100);
Query OK, 1 row affected (0.18 sec)

mysql> insert into SumOfAll values(330);
Query OK, 1 row affected (0.24 sec)

mysql> insert into SumOfAll values(450);
Query OK, 1 row affected (0.10 sec)

mysql> insert into SumOfAll values(400);
Query OK, 1 row affected (0.20 sec)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.

mysql> select *from SumOfAll;

다음은 출력입니다.

+--------+
| Amount |
+--------+
| 100    |
| 330    |
| 450    |
| 400    |
+--------+
4 rows in set (0.00 sec)

이제 값이 테이블에 있는지 여부를 확인하는 저장 프로시저를 만듭니다. 주어진 값이 테이블에 없으면 NULL 값을 얻습니다.

저장 프로시저는 다음과 같습니다.

mysql> DELIMITER //
mysql> create procedure sp_ChechValue(IN value1 int,OUT value2 int)
   -> begin
   -> set value2=(select Amount from SumOfAll where Amount=value1);
   -> end;
   -> //
Query OK, 0 rows affected (0.20 sec)
mysql> delimiter ;

어떤 값으로 저장 프로시저를 호출하고 출력을 세션 변수에 저장합시다.

사례 1:테이블에 값이 없는 경우.

mysql> call sp_ChechValue(300,@isPresent);
Query OK, 0 rows affected (0.00 sec)

이제 select 문을 사용하여 @isPresent 변수의 값을 확인합니다. 쿼리는 다음과 같습니다.

mysql> select @isPresent;

다음은 출력입니다.

+------------+
| @isPresent |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

사례 2:값이 있는 경우.

쿼리는 다음과 같습니다. 저장 프로시저를 호출해 보겠습니다.

mysql> call sp_ChechValue(330,@isPresent);
Query OK, 0 rows affected (0.00 sec)

세션 변수 @isPresent의 값을 확인하십시오. 쿼리는 다음과 같습니다.

mysql> select @isPresent;

다음은 출력입니다.

+------------+
| @isPresent |
+------------+
| 330        |
+------------+
1 row in set (0.00 sec)