>  기사  >  데이터 베이스  >  mysql 저장 프로시저의 매개변수 유형은 무엇입니까?

mysql 저장 프로시저의 매개변수 유형은 무엇입니까?

青灯夜游
青灯夜游원래의
2022-01-24 18:36:2312433검색

mysql 저장 프로시저에는 세 가지 매개 변수 유형이 있습니다. 1. "IN" 키워드로 식별되는 입력 매개 변수는 저장 프로시저에 전달될 수 있습니다. 2. "OUT" 키워드로 식별되는 출력 매개 변수는 다음과 같은 경우에 사용됩니다. 저장 프로시저는 작업 결과의 상황을 반환해야 합니다. 3. "INOUT" 키워드로 표시된 입력 및 출력 매개변수.

mysql 저장 프로시저의 매개변수 유형은 무엇입니까?

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

저장 프로시저:

특정 기능을 완료하기 위한 SQL 문 집합인 프로그래밍 가능한 함수 집합입니다. 이 함수는 데이터베이스에 컴파일, 생성 및 저장됩니다. 인수가 주어지면 실행을 호출합니다(필요한 경우).

장점(저장 프로시저를 사용하는 이유):

  ①매우 반복적인 일부 작업을 저장 프로시저로 캡슐화하여 이러한 SQL에 대한 호출을 단순화합니다.

  ②일괄 처리: SQL + 루프, 트래픽 감소, 즉 "일괄 실행"

③데이터 보안을 보장하는 통합 인터페이스

Oracle 데이터베이스에 비해 MySQL의 저장 프로시저는 기능이 상대적으로 약하고 사용률도 적습니다.

1. 저장 프로시저 생성 및 호출

  >저장 프로시저는 특정 기능을 완료하는 데 사용되는 이름을 가진 코드 조각입니다.

  >생성된 저장 프로시저는 데이터베이스의 데이터 사전에 저장됩니다.

1 저장 프로시저 만들기

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

#예제 작업을 위한 데이터베이스 만들기 및 데이터 테이블 백업

mysql> create database db1;
mysql> use db1;    
mysql> create table PLAYERS as select * from TENNIS.PLAYERS;
mysql> create table MATCHES  as select * from TENNIS.MATCHES;

예: 특정 플레이어가 플레이한 모든 게임을 삭제하는 저장 프로시저 만들기

mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    ->    WHERE playerno = p_playerno;
    -> END$$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;  #将语句的结束符号恢复为分号

분석:

기본 상황에서 저장 프로시저는 기본 데이터베이스와 연결되어 있습니다. 저장 프로시저가 특정 데이터베이스에 생성되도록 지정하려면 프로시저 이름 앞에 접두사로 데이터베이스 이름을 추가하세요. 프로시저에서 DELIMITER $$ 명령을 사용하여 명령문을 변경합니다. 끝 기호는 일시적으로 세미콜론에서 두 개의 $$로 변경되어 프로시저 본문에 사용된 세미콜론이 클라이언트에서 해석되지 않고 서버에 직접 전달됩니다. mysql로).

2. 저장 프로시저 호출: call sp_name[(매개변수 전달됨)];

mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
|       1 |      1 |        6 |   3 |    1 |
|       7 |      1 |       57 |   3 |    0 |
|       8 |      1 |        8 |   0 |    3 |
|       9 |      2 |       27 |   3 |    2 |
|      11 |      2 |      112 |   2 |    3 |
+---------+--------+----------+-----+------+
5 rows in set (0.00 sec)

mysql> call delete_matches(57);
Query OK, 1 row affected (0.03 sec)

mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
|       1 |      1 |        6 |   3 |    1 |
|       8 |      1 |        8 |   0 |    3 |
|       9 |      2 |       27 |   3 |    2 |
|      11 |      2 |      112 |   2 |    3 |
+---------+--------+----------+-----+------+
4 rows in set (0.00 sec)
분석:

 저장 프로시저 호출 시 매개변수를 전달해야 하는 변수 p_playerno가 설정됩니다. 매개변수를 전달하여 p_playerno에 값을 할당한 다음 저장 프로시저에서 SQL 작업을 수행합니다.

3. 저장 프로시저 본문

  > 저장 프로시저 본문에는 dml, ddl 문, if-then-else 및 while-do 문과 같이 프로시저가 호출될 때 실행되어야 하는 문이 포함되어 있습니다. Wait

  >절차적 본문 형식: 시작으로 시작하고 끝으로 끝(중첩 가능)

BEGIN
  BEGIN
    BEGIN
      statements; 
    END
  END
END

참고: 각 중첩 블록과 그 안의 각 문은 끝을 나타내는 세미콜론으로 끝나야 합니다. 프로세스 본문. -end 블록(복합 문이라고도 함)에는 세미콜론이 필요하지 않습니다.

4. 라벨 문 블록

[begin_label:] BEGIN
  [statement_list]
END [end_label]
예:

label1: BEGIN
  label2: BEGIN
    label3: BEGIN
      statements; 
    END label3 ;
  END label2;
END label1

라벨에는 두 가지 기능이 있습니다.

  ①코드 가독성 향상

 ②일부 문(예: Leave 및 iterate 문)에서는 필요합니다. 태그

2. 저장 프로시저의 매개변수   저장 프로시저는 0개 이상의 매개변수를 가질 수 있으며 저장 프로시저 정의에 사용됩니다.

MySQL 저장 프로시저는 각각 세 가지 키워드 IN, OUT 및 INOUT으로 식별되는 세 가지 유형의 매개변수, 즉 입력 매개변수, 출력 매개변수 및 입력/출력 매개변수를 지원합니다.

그 중 입력 매개변수는 저장 프로시저에 전달될 수 있고, 출력 매개변수는 저장 프로시저가 연산 결과를 반환해야 할 때 사용되며, 입력/출력 매개변수는 입력 매개변수와 출력 매개변수 역할을 모두 수행할 수 있습니다.

3가지 매개변수 유형:

    IN 입력 매개변수: 호출자가 프로세스에 값을 전달함을 나타냅니다(수신 값은 리터럴 또는 변수일 수 있음)
  • OUT 출력 매개변수: 프로세스를 나타냄 호출자에게 값을 전달합니다. 나가는 값(여러 값을 반환할 수 있음)(나가는 값은 변수만 가능)
  • INOUT 입력 및 출력 매개변수: 호출자가 프로세스에 값을 전달한다는 의미이며, 프로세스가 호출자에게 값을 전달한다는 의미입니다(값은 변수일 수 있음).
  • mysql> delimiter $$
    mysql> create procedure in_param(in p_in int)
        -> begin
        ->   select p_in;
        ->   set p_in=2;
        ->    select P_in;
        -> end$$
    mysql> delimiter ;
    
    mysql> set @p_in=1;
    
    mysql> call in_param(@p_in);
    +------+
    | p_in |
    +------+
    |    1 |
    +------+
    
    +------+
    | P_in |
    +------+
    |    2 |
    +------+
    
    mysql> select @p_in;
    +-------+
    | @p_in |
    +-------+
    |     1 |
    +-------+
    #以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。

  • 2. 출력 매개변수

mysql> delimiter //
mysql> create procedure out_param(out p_out int)
    ->   begin
    ->     select p_out;
    ->     set p_out=2;
    ->     select p_out;
    ->   end
    -> //
mysql> delimiter ;

mysql> set @p_out=1;

mysql> call out_param(@p_out);
+-------+
| p_out |
+-------+
|  NULL |
+-------+
  #因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null
+-------+
| p_out |
+-------+
|     2 |
+-------+

mysql> select @p_out;
+--------+
| @p_out |
+--------+
|      2 |
+--------+
  #调用了out_param存储过程,输出参数,改变了p_out变量的值
3.

mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)
    ->   begin
    ->     select p_inout;
    ->     set p_inout=2;
    ->     select p_inout;
    ->   end
    -> $$
mysql> delimiter ;

mysql> set @p_inout=1;

mysql> call inout_param(@p_inout);
+---------+
| p_inout |
+---------+
|       1 |
+---------+

+---------+
| p_inout |
+---------+
|       2 |
+---------+

mysql> select @p_inout;
+----------+
| @p_inout |
+----------+
|        2 |
+----------+
#调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量
참고:  ①프로세스에 매개변수가 없으면 프로시저 이름 뒤에 괄호를 써야 합니다.

  예: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ……

  ② 매개변수 이름이 열 이름과 같지 않습니다. 그렇지 않으면 프로시저 본문에서 매개변수 이름이 열 이름으로 처리됩니다

[관련 권장사항:

mysql 비디오 튜토리얼

]

위 내용은 mysql 저장 프로시저의 매개변수 유형은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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