Rumah > Artikel > pangkalan data > Apakah jenis parameter prosedur tersimpan mysql?
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".
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)
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 lajurmysql> 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!