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
Где ошибка?
Да, это ошибка. Благодаря! –
Добро пожаловать. Дополнительное примечание. Хорошей общей практикой является использование стиля кодирования, который уменьшает вероятность столкновения между переменными PL/SQL и именами столбцов, например. v_COLUMN_NAME или vCOLUMN_NAME - в вашем коде это было легко обнаружить, но пакеты с длинными определениями курсора и многими переменными могут привести к большому количеству отложенной отладки. – dpbradley