MySQL, saklı yordamdan bir sonuç kümesini nasıl döndürür?


16

Bir web uygulamasında kullanmak için saklı yordamlar etrafında başımı bulmaya çalışıyorum. Bana öyle geliyor ki, MySQL saklı yordamdaki son ifade ne olursa olsun, o yordamın sonuç kümesi olarak ele alınan şey gibi görünüyor. Ne yazık ki, MySQL belgelerinde bir prosedürün birden fazla sonuç kümesi döndürebileceğini söyleyen referanslar var gibi görünüyor. Bu davranış nasıl tetiklenir? MySQL sunucusuna açıkça yalnızca bir sonuç kümesinin döndürülmesini istediğimi nasıl söyleyebilirim?

(Örneğin, bir SELECT ve birkaç ekler yapan bir sorgu var. İstemcilere ekler hakkında söylemek istemiyorum, ancak istemciye SELECT sonuç kümesi verilmesini istiyorum ....)

Yanıtlar:


17

Bir tabloya veya değişkene eklenmeyen her SELECT deyimi bir sonuç kümesi oluşturur.

Saklı yordamınızın yalnızca bir sonuç kümesi döndürmesini istiyorsanız, yalnızca bir SELECT deyiminizin olduğundan emin olun. Başka SELECT ifadeleriniz varsa, sonuçları bir tabloya veya değişkene eklediklerinden emin olun.

GÜNCELLEME
Burada saklı yordamlara örnekler verilmiştir.

Bu saklı yordam bir sonuç kümesi döndürür:

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 ;

Bu saklı yordam iki sonuç kümesi döndürür:

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 ;

Ah, öyleyse bir tabloya veya değişkene girerse, sonuç olarak dahil edilmez mi? Buna nasıl erişilir; örneğin SELECT INTO kullanıyor mu?
Billy ONeal

İlk soruya evet. İkinci sorunuzda net değilim. Ben saklı yordam içinden yerel bir değişkene bir değer kaydetmek isterseniz, böyle bir şey çalıştırın: SELECT column_name LIMIT 1 INTO local_variable_name;.
dabest1 23:11

Numune sorgu yukarıda olmalıydı: SELECT column_name FROM table LIMIT 1 INTO local_variable_name;.
dabest1 23:11

? ben başka saklı yordam gelen çağrı stored_procedure_name sonra değişkeni almak istiyorsanız ben imleci, çağrı get_info_user_visitstatistics İÇİN DECLARE c_dept CURSOR () sözdizimi hatası kullanırsanız, ben sonuç = çağrı stored_procedure_name () ;, nasıl çözmek ayarlayamıyor
Amitabha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.