Rumah >pangkalan data >tutorial mysql >Apakah jenis parameter prosedur tersimpan mysql?

Apakah jenis parameter prosedur tersimpan mysql?

青灯夜游
青灯夜游asal
2022-01-24 18:36:2312578semak imbas

Terdapat tiga jenis parameter untuk prosedur tersimpan mysql: 1. Parameter input, yang dikenal pasti oleh kata kunci "IN", boleh dihantar ke prosedur tersimpan 2. Parameter output, yang dikenal pasti oleh kata kunci "OUT", digunakan untuk Keadaan di mana prosedur tersimpan perlu mengembalikan hasil operasi; 3. Parameter input dan output dikenal pasti dengan kata kunci "INOUT".

Apakah jenis parameter prosedur tersimpan mysql?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Prosedur Tersimpan:

Satu set fungsi boleh atur cara, iaitu satu set pernyataan SQL yang disusun untuk melengkapkan fungsi tertentu disimpan dalam pangkalan data, pengguna boleh memanggil dan melaksanakannya dengan menyatakan nama prosedur yang disimpan dan memberikan parameter (apabila diperlukan).

Kelebihan (mengapa menggunakan prosedur tersimpan?):

 ①Merangkum beberapa operasi yang sangat berulang ke dalam prosedur tersimpan, memudahkan panggilan ke SQL ini

 ②Pemprosesan kelompok: Gelung SQL, mengurangkan trafik, iaitu, "running batch"

 ③Antara muka bersatu untuk memastikan keselamatan data

Berbanding dengan pangkalan data Oracle, prosedur tersimpan MySQL secara relatifnya Kurang berkuasa dan kurang digunakan.

1. Penciptaan dan panggilan prosedur tersimpan

 > fungsi tertentu.

 >Prosedur tersimpan yang dibuat disimpan dalam kamus data pangkalan data.

1. Buat prosedur tersimpan

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]

#Buat pangkalan data dan sandarkan jadual data sebagai contoh operasi

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;

Contoh : Buat prosedur Tersimpan, padamkan semua permainan yang disertai oleh pemain tertentu

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 ;  #将语句的结束符号恢复为分号

Analisis:

Secara lalai, prosedur tersimpan dikaitkan dengan pangkalan data lalai prosedur tersimpan dicipta dalam tertentu Di bawah pangkalan data, kemudian tambah nama pangkalan data sebagai awalan di hadapan nama prosedur

Apabila mentakrifkan prosedur, gunakan perintah DELIMITER $$ untuk menukar simbol tamat buat sementara waktu; daripada pernyataan daripada koma bertitik; kepada dua $$, supaya prosedur Koma bertitik yang digunakan dalam badan dihantar terus ke pelayan tanpa ditafsirkan oleh klien (seperti MySQL).

2. Panggil prosedur tersimpan: panggil sp_name[(parameter)];

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)

Analisis:

Tetapkan dalam prosedur tersimpan pembolehubah p_playerno perlu diluluskan sebagai parameter Apabila memanggil prosedur tersimpan, tetapkan 57 kepada p_playerno dengan menghantar parameter, dan kemudian lakukan operasi SQL dalam prosedur tersimpan.

3. Badan prosedur yang disimpan

 > -then- else dan while-do statement, mengisytiharkan pernyataan untuk mengisytiharkan pembolehubah, dsb.

 > >Nota: setiap blok Bersarang dan setiap pernyataan di dalamnya mesti diakhiri dengan koma bertitik.

BEGIN
  BEGIN
    BEGIN
      statements; 
    END
  END
END

4. Blok pernyataan Label

Contohnya:

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

Label mempunyai dua fungsi:

label1: BEGIN
  label2: BEGIN
    label3: BEGIN
      statements; 
    END label3 ;
  END label2;
END label1
①Tingkatkan kebolehbacaan kod

②Dalam beberapa kenyataan (seperti kenyataan biarkan dan ulangi), anda perlu menggunakan tag

2. Parameter prosedur tersimpan

Prosedur tersimpan boleh mempunyai 0 atau lebih parameter, yang digunakan untuk takrifan prosedur tersimpan.

Prosedur tersimpan MySQL menyokong tiga jenis parameter, iaitu parameter input, parameter output dan parameter input/output, yang dikenal pasti oleh tiga kata kunci IN, OUT dan INOUT masing-masing.
Antaranya, parameter input boleh dihantar ke prosedur tersimpan, parameter output digunakan apabila prosedur tersimpan perlu mengembalikan hasil operasi, dan parameter input/output boleh berfungsi sebagai kedua-dua parameter input dan parameter output.

3 jenis parameter:

Parameter input IN: menunjukkan bahawa pemanggil menghantar nilai kepada proses (nilai masuk boleh menjadi Literal atau pembolehubah)
  • Parameter output OUT: Menunjukkan bahawa proses menghantar nilai kepada pemanggil (boleh mengembalikan berbilang nilai) (nilai keluar hanya boleh menjadi pembolehubah)
  • Parameter input dan output INOUT: kedua-duanya bermakna pemanggil menghantar nilai kepada proses dan proses itu menghantar nilai kepada pemanggil (nilai hanya boleh menjadi pembolehubah)
  • 1 dalam parameter input

2 >3. Parameter input 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的值,因为前者为局部变量、后者为全局变量。

Nota:

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变量的值
 ①Jika prosedur tidak mempunyai parameter, anda juga mesti menulis kurungan selepas nama prosedur

Contoh: BUAT PROSEDUR sp_name ([proc_parameter[, ...]]) ……

 ②Pastikan bahawa nama parameter tidak sama dengan nama lajur, jika tidak, dalam badan prosedur, nama parameter akan dianggap sebagai nama lajur
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存储过程,接受了输入的参数,也输出参数,改变了变量

[Cadangan berkaitan:

tutorial video mysql

Atas ialah kandungan terperinci Apakah jenis parameter prosedur tersimpan mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn