2009-08-31 5 views
1

Я пишу простую процедуру.Ошибка при сравнении значений в Oracle

DECLARE 
    connection_id LINE.CONNECTION_ID%TYPE := 11009; 
    tmp_integer INTEGER; 
BEGIN 
    SELECT COUNT(*) INTO tmp_integer FROM LINE WHERE LINE.CONNECTION_ID = 11009; 
    DBMS_OUTPUT.PUT_LINE(connection_id); 
    DBMS_OUTPUT.PUT_LINE(tmp_integer); 
END; 

Результат запуска:

11009 
3 

Это хороший результат. У меня есть только три строки, в которых CONNECTION_ID является 11009. После модификации:

DECLARE 
    connection_id LINE.CONNECTION_ID%TYPE := 11009; 
    tmp_integer INTEGER; 
BEGIN 
    SELECT COUNT(*) INTO tmp_integer FROM LINE WHERE LINE.CONNECTION_ID = connection_id; 
    DBMS_OUTPUT.PUT_LINE(connection_id); 
    DBMS_OUTPUT.PUT_LINE(tmp_integer); 
END; 

Но в этом случае я получаю странный результат:

11009 
30997 

Где ошибка?

ответ

3

Попытайтесь изменить имя своей переменной PL/SQL, чтобы оно отличалось от имени столбца в таблице, например. v_connection_id.

+0

Да, это ошибка. Благодаря! –

+0

Добро пожаловать. Дополнительное примечание. Хорошей общей практикой является использование стиля кодирования, который уменьшает вероятность столкновения между переменными PL/SQL и именами столбцов, например. v_COLUMN_NAME или vCOLUMN_NAME - в вашем коде это было легко обнаружить, но пакеты с длинными определениями курсора и многими переменными могут привести к большому количеству отложенной отладки. – dpbradley

Смежные вопросы