Как исправить ошибку при использовании Alias ​​в Oracle - PullRequest
0 голосов
/ 26 июня 2019

Я получаю синтаксическую ошибку при выполнении следующего кода

42601: синтаксическая ошибка в или рядом с "."

Я думаю, что это как-то связано с псевдонимом, но я не вижугде проблема.

SELECT * FROM (
SELECT 
m.shipment_id
m.route_id,
m.leg_sequence_id,
m.leg_warehouse_id,
m.leg_ship_method,
row_number() over (partition by m.route_id order by m.leg_sequence_id desc) as rn
FROM posimorders.sc_execution_eu.o_detailed_routes_v2 m
) 
WHERE rn=1
LIMIT 100;

1 Ответ

2 голосов
/ 26 июня 2019

Ваш код включает в себя:

SELECT * FROM (
SELECT 
m.shipment_id
m.route_id,
...

Вы пропустили запятую после m.shipment_id, поэтому он пытается интерпретировать m.route_id как псевдоним столбца для идентификатора отгрузки, что не соответствует вашим намерениям;и псевдоним - это отдельный идентификатор, а не иерархия, разделенная точками.Следовательно, вы видите ошибку, хотя она не исходит от самой Oracle - ваш клиент, похоже, сначала ее анализирует.

Oracle также не поддерживает LIMIT, но с 12c он имеет ограничивающий строку пункт , который вы можете использовать вместо:

SELECT * FROM (
  SELECT 
  m.shipment_id,
  m.route_id,
  m.leg_sequence_id,
  m.leg_warehouse_id,
  m.leg_ship_method,
  row_number() over (partition by m.route_id order by m.leg_sequence_id desc) as rn
  FROM posimorders.sc_execution_eu.o_detailed_routes_v2 m
) 
WHERE rn=1
FETCH FIRST 100 ROWS ONLY;

или WITH TIES, если хотите.

Три уровня в posimorders.sc_execution_eu.o_detailed_routes_v2 тоже выглядят неверно ... см. Документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...