Использование переменной дает ошибку, но использование прямого значения является правильным

sql oracle plsql

33 просмотра

1 ответ

Добрый день! У меня есть таблица с одной строкой и этот блок кода:

GAME_DATE                    FIRST_PART_ID SECOND_PART_ID    GAME_ID
21.08.16 18:00:00,000000000           1000           1001    1000007




declare
  game_date varchar2(16) := '21.08.2016 15:00';
  varch varchar2(100);
begin
  select g.game_id into varch FROM games g WHERE to_char(g.game_date - 3/24, 'DD.MM.YYYY HH24:MI') = game_date;
  select g.game_id into varch FROM games g WHERE to_char(g.game_date - 3/24, 'DD.MM.YYYY HH24:MI') = '21.08.2016 15:00';
  dbms_output.put_line(varch);
end;

Если я использую первый запрос в «начать», я получаю сообщение об ошибке:

Error report:
ORA-01403: no data found

Но второй запрос возвращает правильный ответ:

anonymous block completed
1000007

Почему такая большая разница?

Любезно помочь.

Автор: Dmitry Klishin Источник Размещён: 08.11.2019 11:21

Ответы (1)


1 плюс

Решение

Столбец game_dateи переменная таблицы game_dateмогут запутаться.

Попробуйте переименовать переменную в v_game_date.

например

declare
  v_game_date varchar2(16) := '21.08.2016 15:00';
  varch varchar2(100);
begin
  select g.game_id into varch FROM games g WHERE to_char(g.game_date - 3/24, 'DD.MM.YYYY HH24:MI') = v_game_date;
  select g.game_id into varch FROM games g WHERE to_char(g.game_date - 3/24, 'DD.MM.YYYY HH24:MI') = '21.08.2016 15:00';
  dbms_output.put_line(varch);
end;
Автор: GavinCattell Размещён: 20.08.2016 01:25
Вопросы из категории :
32x32