Отладка пакетной процедуры и получение сообщения о том, что данные не найдены, хотя на самом деле они есть.
Тестирую только SELECT
SELECT trim(trailing '/' from GL_SECURITY) as DUMMY
FROM b2k_user@b2k
WHERE sms_username = 'FUCHSB';
Это счастливо возвращает мое значение: '23706*706'
Как только я пытаюсь выбрать INTO, я получаю ошибку NO_DATA _FOUND. (закомментировал обработку ошибок, которую я вставил)
set serveroutput on
DECLARE
p_BAS_user_name varchar2(20);
v_gl_inclusion varchar2(1000);
v_gl_exclusions varchar2(1000);
BEGIN
--inputs
p_BAS_user_name := 'FUCHSB';
dbms_output.put_line(p_BAS_user_name);
----- GOOD -----
--BEGIN
SELECT trim(trailing '/' from GL_SECURITY) as DUMMY
INTO v_gl_inclusion
FROM b2k_user@b2k
WHERE sms_username = p_BAS_user_name;
--EXCEPTION
-- WHEN NO_DATA_FOUND THEN
-- v_gl_inclusion := 'SUPER EFFING STUPID';
--END;
dbms_output.put_line(v_gl_inclusion);
END;
Error report:
ORA-01403: no data found
ORA-06512: at line 12
01403. 00000 - "no data found"
*Cause:
*Action:
FUCHSB
Я могу поймать ошибку просто отлично, за исключением того факта, что на основе 1-го запроса я знаю на 100%, что в базе данных есть значение для FUCHSB.
Любые идеи... Я действительно начинаю презирать Oracle. Да, этот запрос выполняется по даталинку, как видно из первого запроса, данные там есть.
Спасибо
Решено Странное поведение SQL developer заставило меня пропустить потенциальный пробел:
Похоже, что SQL Developer при выполнении отдельного select применяет свой собственный компаратор обрезки при выполнении порции 'WHERE sms_username = p_BAS_user_name;'... оказывается, когда он сидит в пакете, он этого не делает... куча пробелов была причиной проблемы... все еще странно, что он возвращается при обычном select. Но все равно спасибо!