我有一个'带有两个字段的表' person_name'和' person_age'。
我想编写一个返回sys_refcursor但是计算额外字段' is_old'的过程。例子:
PROCEDURE people_load(p_name IN VARCHAR2, P_RESULT OUT SYS_REFCURSOR) IS
BEGIN
DECLARE
isOld BOOLEAN := false;
CURSOR cursorTemp IS SELECT person_name, person_age, is_old
WHERE person_name = p_name;
BEGIN
FOR _p IN cursorTemp
LOOP
IF _p.person_age > 75 THEN
_p.is_old:=TRUE;
END IF;
END LOOP;
¿¿P_RESULT:=cursorTemp; //open P_RESULT for (open cursorTemp);??
END;
END people_load;
我不知道如何分配时间光标' cursorTemp'到OUT param' P_RESULT'返回结果。
答案 0 :(得分:2)
BOOLEAN
,只能在PL / SQL中使用。我建议你计算光标内的is_old。我将其更改为包含1(true)或0(false)。
PROCEDURE people_load(p_name IN VARCHAR2, P_RESULT OUT SYS_REFCURSOR) IS
BEGIN
DECLARE
CURSOR cursorTemp IS SELECT person_name, person_age, case when person_age > 75 then 1 else 0 end is_old
WHERE person_name = p_name;
BEGIN
P_RESULT := cursorTemp; //open P_RESULT for (open cursorTemp);
END;
END people_load;
答案 1 :(得分:0)
您应该在选择中进行计算。
CURSOR cursorTemp IS
SELECT
person_name,
person_age,
CASE WHEN person_age>75 THEN 1 ELSE 0 END AS is_old
WHERE person_name = p_name;