Sql ORA-00972:标识符太长
我在VisualStudio的查询工具中执行了一个查询,得到了以下错误 ORA-00972:标识符太长 现在我相信我知道oracle有一个30字节的限制,但这就是我试图执行的查询Sql ORA-00972:标识符太长,sql,oracle,oracle11g,alias,Sql,Oracle,Oracle11g,Alias,我在VisualStudio的查询工具中执行了一个查询,得到了以下错误 ORA-00972:标识符太长 现在我相信我知道oracle有一个30字节的限制,但这就是我试图执行的查询 select "cef_tsroma.tsrido" as "truck", "cef_tsroma.dosvlg" as "rideNumber", "cef_v_cw_shipment.shipmentNumber" as "shipmentNu
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_装运”是一种观点
truck='104490'只是一个用于测试的样本整数。我尝试过各种解决方案,但似乎找不到正确的方法(或寻找正确的方法)
真诚地,谢谢你
如果这是一个愚蠢的问题,我很抱歉
编辑:
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)。试图找出这一点,谷歌仍然返回命名提示:没有成功。仍在搜索
编辑3:
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';
您正在使用双引号包装整个table.column
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'
您正在使用双引号包装整个table.column
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_tsroma.tsrido”应该是“cef_tsroma”。“tsrido”
在edit2上:新名称(别名)在WHERE
或JOIN
子句中无效。举个例子,可以重命名表DUAL
的X
列,但必须在WHERE
子句中使用旧名称:
SELECT dummy AS "myNewName" FROM dual WHERE "myNewName" = 'X';
-- ORA-00904: "myNewName": invalid identifier
SELECT dummy AS "myNewName" FROM dual WHERE dummy = 'X';
-- X
在edit3上:表名和列名看起来像普通的Oracle名称,不区分大小写。因此,您可以删除所有双引号:
select ct.tsrido as truck,
ct.dosvlg as ridenumber,
cs.shipmentNumber as shipmentnumber
from cef_tsroma ct
left join cef_v_cw_shipment cs on ct.dosvlg = cs.shipmentnumber
where ct.truck = '104490';
更详细地解释一下:Oracle表名和列名通常不区分大小写。Oracle以大写形式存储它们,但您可以在查询中使用小写、大写或任意组合
如果用双引号括住表名或列名,则会突然发生变化。然后甲骨文坚持使用这种拼写
因此,在您的例子中,表/视图“cef_tsroma”
不存在,但是cef_tsroma
或cef_tsroma
或“cef_tsroma”引用错误。“cef_tsroma.tsrido”应该是“cef_tsroma”。“tsrido”
在edit2上:新名称(别名)在WHERE
或JOIN
子句中无效。举个例子,可以重命名表DUAL
的X
列,但必须在WHERE
子句中使用旧名称:
SELECT dummy AS "myNewName" FROM dual WHERE "myNewName" = 'X';
-- ORA-00904: "myNewName": invalid identifier
SELECT dummy AS "myNewName" FROM dual WHERE dummy = 'X';
-- X
在edit3上:表名和列名看起来像普通的Oracle名称,不区分大小写。因此,您可以删除所有双引号:
select ct.tsrido as truck,
ct.dosvlg as ridenumber,
cs.shipmentNumber as shipmentnumber
from cef_tsroma ct
left join cef_v_cw_shipment cs on ct.dosvlg = cs.shipmentnumber
where ct.truck = '104490';
更详细地解释一下:Oracle表名和列名通常不区分大小写。Oracle以大写形式存储它们,但您可以在查询中使用小写、大写或任意组合
如果用双引号括住表名或列名,则会突然发生变化。然后甲骨文坚持使用这种拼写
因此,在您的情况下,表/视图“cef_tsroma”
不存在,但是cef_tsroma
或cef_tsroma
或“cef_tsroma”
是否尝试在表上使用别名
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 ct.dosvlg = cs.shipmentNumber
where ct.tsrido = '104490'
您是否尝试在表上使用别名:
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 ct.dosvlg = cs.shipmentNumber
where ct.tsrido = '104490'
以及“cef_v_cw_Shipping.shipmentNumber”
,该代码表示它无法找到表或视图。谢谢选择ct。“tsrido”,ct。“dosvlg”,cs。“shipmentNumber”作为ct上“cef_tsroma”ct左侧外部连接“cef_v_cw_Shipping”cs的shipmentNumber。“dosvlg”=cs。“shipmentNumber”其中ct。“tsrido”='104956';以及“cef_v_cw_Shipping.shipmentNumber”,该代码表示它无法找到表或视图。谢谢选择ct。“tsrido”,ct。“dosvlg”,cs。“shipmentNumber”作为ct上“cef_tsroma”ct左侧外部连接“cef_v_cw_Shipping”cs的shipmentNumber。“dosvlg”=cs。“shipmentNumber”其中ct。“tsrido”='104956';您必须使用原始名称,而不是JOIN
子句中的别名:<代码>关于“cef_tsroma”。“dosvlg”=“cef_v_cv_Shipping”。“shipmentNumber”我尝试过这一点,但也不起作用。错误ORA-00904:“cef_v_cv_Shipping”。“shipmentNumber”:带有表别名的无效标识符ct
和cs
连接语法在ct.dosvlg=cs.shipmentNumber上为。请参见edit3,仍然返回错误。哦,天哪!你能查询一下表名和列名的正确拼写吗<代码>从用户选项卡中选择表名、列名,其中上部(表名)位于('CEF_TSROMA'、'CEF_V_CW_Shipping')
您必须使用原始名称,而不是JOIN
子句中的别名:<代码>关于“cef_tsroma”。“dosvlg”=“cef_v_cv_Shipping”。“shipmentNumber”我尝试过这一点,但也不起作用。错误ORA-00904:“cef_v_cv_Shipping”。“shipmentNumber”:带有表别名的无效标识符ct
和cs
连接语法在ct.dosvlg=cs.shipmentNumber上为。请参见edit3,仍然返回错误。哦,天哪!你能查询一下表名和列名的正确拼写吗<代码>从“用户”选项卡中选择表名、列名,上面的(表名)位于('C