我在其中一个oracle SP中有以下声明:
OPEN CUR_NUM FOR
SELECT RTRIM(LTRIM(num)) as num
FROM USER WHERE USER_ID = v_user_id;
当上述内容未返回任何内容时,SP结果中没有列名。但是当我没有找到数据时,我希望光标仍然有num
列,其中包含一些默认值NOTHING
。
这可行吗?
答案 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;