gpt4 book ai didi

sql - ORA-00972 : Identifier is too long

转载 作者:行者123 更新时间:2023-12-02 22:17:31 29 4
gpt4 key购买 nike

我有一个在 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”是一个 View 。

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';

最佳答案

引号是错误的。 "cef_tsroma.tsrido"应该是 "cef_tsroma"."tsrido"...

在 edit2 上:新名称(别名)在 WHEREJOIN 子句中没有影响。举个例子,表 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 以大写形式存储它们,但您可以在查询中使用小写、大写或任意组合。

如果用双引号将表名或列名括起来,这会突然改变。然后 Oracle 坚持使用完全相同的拼写。

因此,在您的情况下,表/ View "cef_tsroma" 不存在,但是 cef_tsromaCEF_TSROMA “CEF_TSROMA” 确实...

关于sql - ORA-00972 : Identifier is too long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218695/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com