当找不到任何内容时,如何在oracle游标中返回一些默认值

时间:2010-06-11 22:55:17

标签: sql oracle

我在其中一个oracle SP中有以下声明:

OPEN CUR_NUM FOR 
   SELECT RTRIM(LTRIM(num)) as num 
   FROM USER WHERE USER_ID = v_user_id;

当上述内容未返回任何内容时,SP结果中没有列名。但是当我没有找到数据时,我希望光标仍然有num列,其中包含一些默认值NOTHING

这可行吗?

3 个答案:

答案 0 :(得分:0)

如果您确实需要这样做,可以使用UNION选择您的虚拟行,以防user_id不存在:

OPEN CUR_NUM FOR 
   SELECT RTRIM(LTRIM(num)) AS num 
   FROM user WHERE USER_ID = v_user_id
 UNION ALL
   SELECT 'NOTHING' AS num
   FROM dual
   WHERE NOT EXISTS (
     SELECT 1
     FROM user
     WHERE user_id = v_user_Id
   )

答案 1 :(得分:0)

我认为有两个选择:

如果返回的行但该列为空,则在值周围添加NVL(),

否则

如果可能,添加MIN或MAX函数 - 这可以强制返回行

答案 2 :(得分:0)

如果在函数中使用此代码块,则以下内容将像魅力一样:

首先,定义您的返回变量

v_ret VARCHAR2(24);

现在,将游标CUR_NUM定义为select语句

CURSOR CUR_NUM IS
SELECT RTRIM(LTRIM(num)) as num 
   FROM USER WHERE USER_ID = v_user_id;

BEGIN
OPEN CUR_NUM;
FETCH CUR_NUM into v_ret;
CLOSE CUR_NUM;

RETURN nvl(v_ret,'NOTHING');
end;