как вернуть какое-то значение по умолчанию в oracle курсор, когда ничего не найдено - PullRequest
1 голос
/ 12 июня 2010

У меня есть следующее утверждение в одном из оракулов SP:

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

Когда вышеупомянутое ничего не возвращает, у результата SP просто нет имени столбца.Но я бы хотел, чтобы курсор все еще имел столбец num со значением по умолчанию, например NOTHING, когда данные не найдены.

Это выполнимо?

Ответы [ 3 ]

0 голосов
/ 12 июня 2010

два варианта, я думаю:

добавить NVL () вокруг значения, если есть возвращаемая строка, но столбец пуст,

в противном случае

добавить MINили функция MAX, если это возможно - это может привести к возвращению строки

0 голосов
/ 16 мая 2017

Если этот кодовый блок используется в функции, следующее будет работать как символ:

Сначала определите вашу возвращаемую переменную

v_ret VARCHAR2(24);

Теперь определите курсор CUR_NUM как оператор выбора

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;
0 голосов
/ 12 июня 2010

Если вам действительно нужно это сделать, вы можете использовать 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
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...