Sql ORA-00972:标识符太长

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

我在VisualStudio的查询工具中执行了一个查询,得到了以下错误

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_装运”是一种观点

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