Evet, bir IF
ifadesini kullanarak alternatifler vardır: yerine. Örnek olarak
:
CREATE PROCEDURE check_budget_sp(IN in_department_name VARCHAR(20)
,IN in_salary DECIMAL(8,2),OUT res VARCHAR(1))
BEGIN
SET res = 'T';
SELECT CASE WHEN d.max_budget>(d.cur_budget + in_salary) THEN 'F' ELSE 'T' END
INTO res
FROM department d
WHERE d.dept_name = in_department_name
LIMIT 1;
END$$
SEÇ bir satır dönmezse
, MySQL bir uyarı mesajı atmak için gidiyor. (OP prosedür deseni aynı davranışı sergileyecektir.) Bir uyarıdan kaçınmak istiyorsak bunu kolayca yapabilirdik, ancak bazı ek kodlar gerektirirdi.
hiçbir satır sorgu tarafından döndürülen durumunda OP prosedüründe
then 'F' else 'T'
mantığı, taklit etmek için, biz sadece biz sorgu işlemini gerçekleştirmeden önce,
else
tarafından iade edileceği değere dönüş değerini başlatılamadı.
Bu uygulama, herhangi bir ekstra "yardımcı" yordam değişkenini gerektirmez. Ve fazladan SET
bildirimi, prosedürün bir 'T' veya 'F' (sorguyu bir satır döndürmediğinde) döndürdüğünden emin olmak için oradadır. Diğer birkaç alternatif var. MySQL IF
deyimi için
,
THEN
ve
END IF
zorunludur.
ELSE
isteğe bağlıdır.
Bu gerçekten sorun değil.
Eğer END
CASE
ifadesinin parçası olarak gerekli, bir MySQL özgü fonksiyonlu, CASE
ifadeyi değiştirmek olabilir beğenmezseniz ... Bu bir kavram değil
IF(d.max_budget>(d.cur_budget + in_salary),'F','T')
, bir sözdizimi var. Maalesef, hoşuna gitmiyorsa yapabileceğiniz fazla bir şey yok. – Loufylouf
"ELSE" isteğe bağlıdır. 'THEN' ve' END IF' zorunludur. problem değil. Prosedürün çalıştığından emin misin? "Max_helper" ve "cur_budget" olarak adlandırılmayan yordam değişkenlerine başvurular var. Ve bir SQL deyiminde prosedürün adı ile nitelendirilmiş yordam argümanlarını hiç görmedim. Bu MySQL sözdizimine benziyor, ancak bu kodun aslında nasıl çalıştığına dair şaşkınım. – spencer7593