Я видел подобные вопросы, но в основном они предлагают использовать хранимые процедуры вместо функций. Тем не менее, мне специально нужна функция, потому что: < /p>
a) Я хочу использовать ее в выборе запроса.
b) он должен вернуть несколько строк.
c) Есть ли способ сделать функцию MySQL вернуть несколько строк. p>
CREATE FUNCTION neura_abdm_dev.fun_patient_details(from_date DATE, to_date DATE)
RETURNING VARCHAR(20), VARCHAR(20), VARCHAR(150), VARCHAR(30), DATE, VARCHAR(50);
DEFINE v_patient_id VARCHAR(20);
DEFINE v_episode_id VARCHAR(20);
DEFINE v_patient_name VARCHAR(150);
DEFINE v_gender_desc VARCHAR(30);
DEFINE v_generated_date DATE;
DEFINE v_bed_name VARCHAR(50);
FOREACH cursor1 FOR
SELECT
pdt.patient_id,
edt.episode_id,
pdt.first_name || ' ' || pdt.last_name AS patient_name,
(SELECT mgt.gender_desc
FROM master_gender_tbl mgt
WHERE pdt.gender_id = mgt.gender_id) AS v_gender_desc,
pdt.generated_date
INTO
v_patient_id, v_episode_id, v_patient_name, v_gender_desc, v_generated_date
FROM
patient_details_tbl pdt
JOIN episode_details_tbl edt ON edt.patient_id = pdt.patient_id
WHERE
pdt.generated_date BETWEEN from_date AND to_date;
-- Fetch the bed name
SELECT
mbt.bed_name
INTO
v_bed_name
FROM
book_bed_tbl bbt
JOIN master_bed_tbl mbt ON bbt.bed_id = mbt.bed_id
WHERE
bbt.episode_id = v_episode_id;
RETURN v_patient_id, v_episode_id, v_patient_name, v_gender_desc, v_generated_date, v_bed_name WITH RESUME;
END FOREACH;
END FUNCTION;
< /code>
ожидаемый вывод: < /p>
patent_id < /th>
isport_id < /th>
patent_name < /th>
gender_desc < /th>
Generated_date bed_name < /th>
< /tr>
< /thead>
cgsl25000003 < /td>
op25000002 < /td>
akashg < /td>
мужчина < /td>
2025-01-01 < /td>
< /tr>
cgsl25000004 < /td>
ip25000003 < / td>
dhanumjaireddy < /td>
мужчина < /td>
2025-01-01 < /td>
< /tr>
cgsl25000005 < /td>
op25000005 < /td>
abhimanyuk < /td>
Мужчина
2025-01-02
Подробнее здесь: https://stackoverflow.com/questions/794 ... ons-only-r