Prosedur tersimpan (Prosedur Tersimpan) ialah satu set pernyataan SQL yang disimpan dalam pangkalan data. Dengan merangkum logik perniagaan, prosedur tersimpan boleh meningkatkan kecekapan pelaksanaan pangkalan data dan keselamatan capaian data.
Fungsi Tersimpan merujuk kepada set pernyataan SQL yang dilaksanakan yang disimpan dalam pangkalan data Perbezaan daripada prosedur tersimpan ialah fungsi tersimpan mempunyai nilai pulangan.
CREATE PROCEDURE procedure_name([IN/OUT] parameter_name data_type) BEGIN SQL Statement; END;
Andaikan kita sudah mempunyai jadual pekerja bernama employee
, dan kini kita perlu mencipta prosedur tersimpan yang boleh Membuat Pertanyaan nama dan gaji pekerja:
DELIMITER // CREATE PROCEDURE get_employee_info_by_id(IN emp_id INT) BEGIN SELECT name, salary FROM employee WHERE id = emp_id; END // DELIMITER ;
CREATE FUNCTION function_name([IN/OUT] parameter_name data_type) RETURNS data_type BEGIN DECLARE variable_name data_type; SQL Statement; RETURN variable_name; END;
Katakan kita sudah mempunyai jadual produk bernama product
, dan sekarang kita perlu mencipta fungsi tersimpan, yang boleh Tanya harga unit produk mengikut nombor produk:
DELIMITER // CREATE FUNCTION get_product_price_by_id(IN product_id INT) RETURNS DECIMAL(10,2) BEGIN DECLARE price DECIMAL(10,2); SELECT unit_price INTO price FROM product WHERE id = product_id; RETURN price; END // DELIMITER ;
Panggil prosedur tersimpan:
<🎜. >CALL procedure_name([parameter_name]);
SELECT function_name([parameter_name]);
yang dibuat di atas, prosedur tersimpan boleh dipanggil seperti ini: get_employee_info_by_id
CALL get_employee_info_by_id(1);
Fungsi tersimpan boleh dipanggil seperti ini: get_product_price_by_id
SELECT get_product_price_by_id(1001);
Sekarang kita perlu membuat prosedur tersimpan untuk menanyakan nama dan gaji pekerja Jika gaji lebih daripada 5000, tambah nota kepada keputusan: "Pendapatan Tinggi". employee
DELIMITER // CREATE PROCEDURE get_employee_info_with_note() BEGIN SELECT name, salary, IF(salary > 5000, '高收入', '') AS note FROM employee; END // DELIMITER ;
, dan kini kita perlu mencipta prosedur tersimpan untuk mendarabkan semua harga unit produk 1.1. product
DELIMITER // CREATE PROCEDURE update_all_product_price() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE pid INT; DECLARE price DECIMAL(10,2); DECLARE cur CURSOR FOR SELECT id, unit_price FROM product; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO pid, price; IF done THEN LEAVE read_loop; END IF; UPDATE product SET unit_price = price * 1.1 WHERE id = pid; END LOOP; CLOSE cur; END // DELIMITER ;
dan jadual butiran pesanan bernama order
, dan kini kita perlu mencipta sisipan prosedur tersimpan rekod ke dalam dua jadual ini. order_item
DELIMITER // CREATE PROCEDURE insert_order(IN order_id INT, IN item_name VARCHAR(50), IN item_price DECIMAL(10,2), IN item_quantity INT) BEGIN START TRANSACTION; INSERT INTO `order`(id) VALUES(order_id); SET @last_order_id = LAST_INSERT_ID(); INSERT INTO order_item(order_id, item_name, item_price, item_quantity) VALUES(@last_order_id, item_name, item_price, item_quantity); COMMIT; END // DELIMITER ;
, dan kini kita perlu mencipta fungsi storan untuk menanyakan harga unit maksimum dalam jadual produk . product
DELIMITER // CREATE FUNCTION get_max_product_price() RETURNS DECIMAL(10,2) BEGIN DECLARE max_price DECIMAL(10,2); DECLARE cur CURSOR FOR SELECT unit_price FROM product; DECLARE CONTINUE HANDLER FOR NOT FOUND SET max_price = 0; OPEN cur; FETCH cur INTO max_price; read_loop: LOOP FETCH cur INTO max_price; IF max_price IS NULL THEN LEAVE read_loop; END IF; IF max_price > @max_price THEN SET @max_price = max_price; END IF; END LOOP; CLOSE cur; RETURN max_price; END // DELIMITER ;
Atas ialah kandungan terperinci Cara menggunakan prosedur tersimpan MYSQL dan fungsi tersimpan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!