Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
PROCEDURE login_attr(a_id IN CHAR, a_pw IN VARCHAR2, v_ret IN OUT VARCHAR2)
IS
v_count INTEGER;
BEGIN
v_count := 0;
SELECT NVL (COUNT (attrib_desc), 0)
INTO v_count
FROM tab_attr a,
tab_users b
WHERE a.msc_cd = b.user_dept
AND a.attr_cd = 'CD'
AND lattr_cd = 'ABCD'
AND UPPER (user_no) = UPPER (a_id)
AND UPPER (user_pw) = UPPER (a_pw);
IF v_count > 0 THEN
SELECT attrib_desc || '@' || user_lang || '@' || user_autoimg ||
'@' || user_imgtime || '@' || user_loc || '@' ||
user_dept
INTO v_ret
FROM tab_attr a,
tab_users b
WHERE a.msc_cd = b.user_dept
AND a.attr_cd = 'CD'
AND lattr_cd = 'ABCD'
AND UPPER (user_no) = UPPER (a_id)
AND UPPER (user_pw) = UPPER (a_pw);
ELSE
v_ret := ' ';
END IF;
END;
Нам нужно больше селектов.
P.S. почему в предпросмотре язык Java, хотя выбран SQL?
По-моему (но полагаться не стоит), стандарт предписывает, что если селект из одной и той же таблицы, то должен выполнятся один раз, ну, или, по крайней мере результат обязан быть один и тот же в обоих случаях (т.е. в теории должно соптимизироваться до одного селекта).
Врать не буду, возможно, что в каком-то AS/400 такое было проще пареной репы. Плюс, иногда могла быть ситуация, когда запрос, который должен был вернуть ноль строк, возвращал одну, с NULL'ами в каждом поле. Я так и не понял, что это было. Но костылей тогда натыкали знатно.
Хотя, конечно, я мог что-то и перепутать, дело давнее.
У Вас же PL/SQL оракловый, вот оно и намекает, что пора перебрасывать всю бизнес логику на джаву.
Я не знал. Отстаю от жизни.
Зависит от уровня изоляции. В общем случае - не обязан.
это ж когда каунт нулл вернуть может?
В Oracle PL\SQL для этого случая (возвращаясь к тексту ГК) заворачивают SQL в exception, с catch no_data_found, как-то так...
Обжегшись на sum'е дует на count 😉
Хотя, конечно, я мог что-то и перепутать, дело давнее.
ref cursor ненужно?
Очень весело будет, когда понадобится вернуть email юзера.
Хотя мне кажется, что автор замутил бы для этого отдельную процедуру...