Làm thế nào để MySQL trả về một tập kết quả từ một thủ tục được lưu trữ?


16

Tôi đang cố gắng tìm hiểu các thủ tục được lưu trữ để sử dụng trong một ứng dụng web. Dường như với tôi rằng bất cứ câu lệnh cuối cùng nào trong thủ tục lưu trữ MySQL dường như là những gì được coi là tập kết quả của thủ tục đó. Thật không may, có vẻ như có các tài liệu tham khảo trong các tài liệu MySQL nói rằng một thủ tục có thể trả về nhiều tập kết quả. Hành vi này được kích hoạt như thế nào? Làm thế nào tôi có thể nói với máy chủ MySQL rằng tôi rõ ràng chỉ muốn một bộ kết quả được trả về?

(Ví dụ: tôi có một truy vấn thực hiện CHỌN và một vài lần chèn. Tôi không muốn nói với khách hàng về các lần chèn, nhưng tôi muốn khách hàng được cung cấp tập kết quả của CHỌN ....)

Câu trả lời:


17

Mỗi câu lệnh CHỌN không chèn vào bảng hoặc biến sẽ tạo ra tập kết quả.

Nếu bạn muốn thủ tục được lưu trữ của mình chỉ trả về một tập kết quả, hãy đảm bảo rằng bạn chỉ có một câu lệnh CHỌN. Nếu bạn có các câu lệnh CHỌN khác, hãy đảm bảo rằng chúng chèn kết quả vào một bảng hoặc biến.

CẬP NHẬT
Dưới đây là ví dụ về các thủ tục được lưu trữ.

Quy trình được lưu trữ này sẽ trả về một tập kết quả:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

Quy trình được lưu trữ này sẽ trả về hai tập kết quả:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;

À, vậy nếu nó đi vào một bảng hoặc biến, kết quả là nó không được đưa vào? Làm thế nào để một người truy cập đó; sử dụng ví dụ CHỌN VÀO?
Billy ONeal

Có cho câu hỏi đầu tiên. Tôi không rõ ràng về câu hỏi thứ hai của bạn. Nếu tôi muốn lưu một giá trị vào một biến cục bộ từ trong thủ tục được lưu trữ, tôi chạy một cái gì đó như thế này : SELECT column_name LIMIT 1 INTO local_variable_name;.
dabest1

Truy vấn mẫu ở trên nên có : SELECT column_name FROM table LIMIT 1 INTO local_variable_name;.
dabest1

nếu tôi muốn có được biến sau stored_procedure_name cuộc gọi từ một thủ tục lưu trữ, tôi không thể thiết lập kết quả = gọi stored_procedure_name () ;, làm thế nào để giải quyết nó nếu tôi sử dụng con trỏ, DECLARE CURSOR c_dept CHO get_info_user_visitstatistics call () lỗi cú pháp?
A Di Đà
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.