#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: Спасибо, что изучили это. Все находится только в одной схеме, но очень сложной. Джастин может быть прав, ошибка может быть вызвана другим блоком, а не этим.