MySQL **không hỗ trợ** SELECT * FROM CALL proc() hay SELECT * FROM proc() trong mệnh đề FROM. Cách chuẩn: dùng CALL để thực thi, sau đó SELECT dữ liệu từ bảng nếu procedure làm thay đổi dữ liệu.
Ví dụ minh họa
Tạo bảng:
CREATE TABLE DemoTable2 (
CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerName VARCHAR(100),
ShippingDateTime DATETIME
);
Tạo procedure INSERT:
DELIMITER //
CREATE PROCEDURE insert_information(IN Name VARCHAR(100), IN shippingtime DATETIME)
BEGIN
INSERT INTO DemoTable2 (CustomerName, ShippingDateTime) VALUES (Name, shippingtime);
END //
DELIMITER ;
Gọi procedure:
CALL insert_information('Chris', NOW());
Truy vấn dữ liệu sau khi gọi:
SELECT * FROM DemoTable2;
Kết quả:
+------------+--------------+---------------------+ | CustomerId | CustomerName | ShippingDateTime | +------------+--------------+---------------------+ | 1 | Chris | 2019-04-08 15:03:07 | +------------+--------------+---------------------+
Lưu ý:
- Procedure có thể có tham số
IN,OUT,INOUT. - Để lấy giá trị trả về từ procedure, dùng tham số
OUThoặc biến session@var(xem bài trước). - MySQL 8.0+ hỗ trợ
RETURNINGclause choINSERT(không liên quan đến procedure).