Oracle PL/SQL:PLS-00382:表达式的类型错误。忽略语句

Oracle PL/SQL:PLS-00382:表达式的类型错误。忽略语句,oracle,plsql,cursor,Oracle,Plsql,Cursor,我有一个“person”表,有两个字段“person\u name”和“person\u age” 我想写一个过程,返回sys\u refcursor,但计算一个额外的字段'is\u old'。por示例: PROCEDURE people_load(p_name IN VARCHAR2, P_RESULT OUT SYS_REFCURSOR) IS BEGIN DECLARE isOld BOOLEAN := false; CURSOR cursor

我有一个“person”表,有两个字段“person\u name”和“person\u age”

我想写一个过程,返回sys\u refcursor,但计算一个额外的字段'is\u old'。por示例:

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参数'p_RESULT'以返回结果

  • 您不能在SQL中使用
    布尔值,只能在PL/SQL中使用
  • 不能在光标中循环并重新计算列
  • 您声明了一个变量isOld,但从未使用过它
  • 我建议您计算光标内的旧值。我将其更改为包含1(true)或0(false)

  • 您不能在SQL中使用
    布尔值,只能在PL/SQL中使用
  • 不能在光标中循环并重新计算列
  • 您声明了一个变量isOld,但从未使用过它
  • 我建议您计算光标内的旧值。我将其更改为包含1(true)或0(false)


    您应该在选择中进行计算

     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;
    

    您应该在选择中进行计算

     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;
    

    我在这上面浪费了7个小时。。。如果我知道你住在哪里,那就去你家里擦鞋吧。如果你花7个小时通过样本学习Oracle,那将是一次更好的学习体验。你还有更多的时间学习。祝你好运:-)非常感谢你的建议;)我在这上面浪费了7个小时。。。如果我知道你住在哪里,那就去你家里擦鞋吧。如果你花7个小时通过样本学习Oracle,那将是一次更好的学习体验。你还有更多的时间学习。祝你好运:-)非常感谢你的建议;)