данные не найдены при наличии данных

#oracle11g #sqlplus

#oracle11g #sqlplus

Вопрос:

Я наткнулся на этот странный сценарий, и я не знаю, что я делаю не так:

Чтобы упростить проблему, у меня есть таблица с именем ABC со следующей структурой:

 MyValue varchar2(10)
MyKey  Number
  

И это мой набор данных в таблице ABC

 null, 1
null, 2
null, 3
'WYZ', 4
  

У меня есть функция:

 function DEF
RETURN varchar2
is
v varchar2(10);
Begin
  SELECT "MyValue" INTO v
  WHERE "MyKey"<5 and "MyValue" is not null;
  RETURN v;
End;
  

Когда я тестировал вне программы, запрос выдавал результат ‘WYZ’, но когда я тестировал функцию, она обнаружила ошибку «данные не найдены»!
Может кто-нибудь сказать мне, что я сделал неправильно?

Комментарии:

1. Можете ли вы предоставить воспроизводимый тестовый пример (DDL для создания таблицы, DML для заполнения данных и код, который выдает ошибку)? То, что вы говорите, не имеет смысла, поэтому что-то в вашем описании должно быть отключено. Либо данные в таблице — это не то, что вы опубликовали (возможно, потому, что у вас есть незафиксированные изменения в одном сеансе, которые не видны в другом), либо код, который вы публикуете, — это не то, что на самом деле выдает ошибку.

2. Или, может быть, функция видит таблицу с тем же именем в другой схеме? Вы делаете все в одной схеме?

3. @JustinCave: Джастин, возможно, ты прав. Это сложная база данных с несколькими таблицами, представлениями и отношениями, поэтому было бы невозможно предоставить вам воспроизводимый тестовый пример. Но вполне может быть, что ошибка, которую я видел, на самом деле была не тем кодом, который я подозревал, как вы указали. Вы помогли мне сузить проблемную область и упростить процесс устранения неполадок, поскольку подтвердили правильность приведенного выше кода. Я проверю другой блок внутри sp, а также проверю наличие незафиксированных изменений.

4. @AlexPoole: Спасибо, что изучили это. Все находится только в одной схеме, но очень сложной. Джастин может быть прав, ошибка может быть вызвана другим блоком, а не этим.