MySQL คืนค่าผลลัพธ์จากกระบวนงานที่เก็บไว้อย่างไร


16

ฉันพยายามทำให้ขั้นตอนการจัดเก็บเพื่อใช้ในเว็บแอปพลิเคชัน สำหรับผมแล้วดูเหมือนว่าคำสั่งสุดท้ายที่อยู่ในขั้นตอนการจัดเก็บของ MySQL จะเป็นสิ่งที่ได้รับการปฏิบัติตามชุดผลลัพธ์ของขั้นตอนนั้น น่าเสียดายที่ดูเหมือนว่ามีการอ้างอิงในเอกสาร MySQL ที่กล่าวว่ากระบวนการสามารถส่งคืนชุดผลลัพธ์ได้หลายชุด พฤติกรรมนี้ทำงานอย่างไร ฉันจะบอกเซิร์ฟเวอร์ MySQL ได้อย่างไรว่าฉันต้องการส่งคืนชุดผลลัพธ์เดียวเท่านั้น?

(ตัวอย่างเช่นฉันมีข้อความค้นหาที่เลือกและแทรกไม่กี่ฉันไม่ต้องการบอกลูกค้าเกี่ยวกับส่วนแทรก แต่ฉันต้องการให้ลูกค้าได้รับชุดผลลัพธ์ของ SELECT .... )

คำตอบ:


17

แต่ละคำสั่ง SELECT ที่ไม่ได้แทรกลงในตารางหรือตัวแปรจะสร้างชุดผลลัพธ์

หากคุณต้องการให้กระบวนงานที่เก็บไว้ของคุณส่งคืนชุดผลลัพธ์เพียงชุดเดียวตรวจสอบให้แน่ใจว่าคุณมีคำสั่ง SELECT เพียงชุดเดียว หากคุณมีคำสั่ง SELECT อื่น ๆ ตรวจสอบให้แน่ใจว่าพวกเขาแทรกผลลัพธ์ลงในตารางหรือตัวแปร

UPDATE
นี่คือตัวอย่างของขั้นตอนการจัดเก็บ

โพรซีเดอร์ที่เก็บไว้นี้จะส่งคืนชุดผลลัพธ์หนึ่งชุด:

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 ;

โพรซีเดอร์ที่เก็บไว้นี้จะส่งคืนชุดผลลัพธ์สองชุด:

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 ;

อ๊ะถ้ามันเข้าไปในตารางหรือตัวแปรมันจะไม่ถูกรวมเข้าไปด้วยเหรอ? คนเราเข้าถึงได้อย่างไร ใช้เช่น SELECT INTO?
Billy ONeal

ใช่คำถามแรก ฉันไม่เข้าใจคำถามที่สองของคุณ SELECT column_name LIMIT 1 INTO local_variable_name;ถ้าผมต้องการที่จะบันทึกค่าลงในตัวแปรท้องถิ่นจากภายในขั้นตอนการเก็บผมใช้อะไรเช่นนี้
dabest1

SELECT column_name FROM table LIMIT 1 INTO local_variable_name;แบบสอบถามตัวอย่างข้างต้นควรจะได้รับ:
dabest1

ถ้าผมต้องการที่จะได้รับหลังจากตัวแปร stored_procedure_name สายจากขั้นตอนการเก็บอีกฉันไม่สามารถตั้งค่าผล = โทร stored_procedure_name () ;, วิธีการที่จะแก้ปัญหาได้ถ้าฉันใช้เคอร์เซอร์เคอร์เซอร์ DECLARE c_dept สำหรับ get_info_user_visitstatistics โทร () ไวยากรณ์ผิดพลาด?
Amitabha
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.