У меня есть запрос, который я выполняю в инструменте запросов Visual Studio, и я получаю следующую ошибку.
ORA-00972: слишком длинный идентификатор.
Теперь я считаю, что знаю, что oracle имеет ограничение в 30 байт, но это тот запрос, который я пытаюсь выполнить.
select
"cef_tsroma.tsrido" as "truck",
"cef_tsroma.dosvlg" as "rideNumber",
"cef_v_cw_shipment.shipmentNumber" as "shipmentNumber"
from
"cef_tsroma" left outer join "cef_v_cw_shipment" on "rideNumber" = "shipmentNumber"
where
"truck" = '104490'
К сожалению, я не смогу изменить саму структуру базы данных, так как ею управляет другая компания, которая ничего не знает о нормализации базы данных или находится в ситуации, когда они просто не могут или не должны. Я не знаю. Примите во внимание, что "cef_v_cw_shipment" - это представление.
truck = '104490' - это всего лишь пример целого числа для целей тестирования. Я пробовал различные решения, но правильный метод (или поиск правильного метода), кажется, ускользает от меня.
С уважением, я.
P.S. Извините, если это глупый вопрос.
Редактировать:
select
"cef_tsroma"."tsrido" as "truck",
"cef_tsroma"."dosvlg" as "rideNumber",
"cef_v_cw_shipment"."shipmentNumber" as "shipmentNumber"
from
"cef_tsroma" left outer join "cef_v_cw_shipment" on "rideNumber" = "shipmentNumber"
where
"truck" = '104490'
rideNumber - теперь недопустимый идентификатор, я к этому скоро вернусь. Я думаю, что я неправильно использовал псевдоним, но я не уверен. Пойди, чтобы узнать.
РЕДАКТИРОВАТЬ2:
select
ct.tsrido as "truck",
ct.dosvlg as "rideNumber",
cs.shipmentNumber as "shipmentNumber"
from "cef_tsroma" ct
left outer join "cef_v_cw_shipment" cs
on "rideNumber" = "shipmentNumber"
where "truck" = '104490'
Сейчас я использую этот синтаксис, поскольку он намного чище и легче для понимания, чем предыдущий. Однако я все еще сталкиваюсь с ORA-00904: "rideNumber": недопустимый идентификатор (вероятно, это также учитывается и для shipmentNumber в строке соединения. Пытаясь понять это, Google возвращает подсказки по именованию: безуспешно. Все еще поиск.
Edit3:
select
ct.tsrido as truck,
ct.dosvlg as rideNumber,
cs.shipmentNumber as shipment
from
"cef_tsroma" ct
left outer join
"cef_v_cw_shipment" cs
on
ct.dosvlg = cs.shipmentNumber
where
truck = '104490'
Теперь, следуя предложениям, это текущий синтаксис. В настоящее время он возвращает сообщение об ошибке:
ОШИБКА ORA-00904: "CS". "SHIPMENTNUMBER": недопустимый идентификатор.
Извините, я не проектировал эту базу данных>):
Edit4 / решение?
Как ни странно, это вроде работает.
select ct."tsrido", ct."dosvlg", cs."shipmentNumber" as shipmentnumber
from "cef_tsroma" ct
left outer join "cef_v_cw_shipment" cs
on ct."dosvlg" = cs."shipmentNumber"
where ct."tsrido" = '104956';
JOIN
: ...ON "cef_tsroma"."dosvlg" = "cef_v_cv_shipment"."shipmentNumber"
- person wolφi   schedule 08.01.2013ct
иcs
синтаксис соединения -ON ct.dosvlg = cs.shipmentNumber
. - person wolφi   schedule 08.01.2013SELECT table_name, column_name FROM user_tab_columns WHERE UPPER(table_name) IN ('CEF_TSROMA','CEF_V_CW_SHIPMENT');
- person wolφi   schedule 08.01.2013cef_tsroma
, поэтому вам, конечно же, нужны кавычки! Ваше решение"cef_tsroma"
абсолютно правильное, цитаты необходимы. Извините за то, что не дал правильный ответ сразу! - person wolφi   schedule 09.01.2013