ORA-00972: - Bezeichner ist zu lang
Ich habe eine Abfrage, die ich ausführen in visual studio-Abfrage-tool und ich erhalte die folgende Fehlermeldung.
ORA-00972: Bezeichner zu lang.
Nun ich glaube, dass ich mir bewusst bin, dass oracle hat ein 30-byte-Grenze, aber das ist die Abfrage, die ich versuche zu führen.
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'
Leider werde ich nicht in der Lage sein zu ändern die Struktur der Datenbank selbst, wie es ist gelungen, durch ein anderes Unternehmen, das weiß, dass nichts über eine Datenbank-Normalisierung oder ist in einer situation, wo Sie einfach nicht sollte oder nicht. Ich weiß es nicht. Bitte berücksichtigen Sie, dass "cef_v_cw_shipment" ist eine view.
LKW = '104490' ist nur ein Beispiel-integer für Testzwecke. Ich habe versucht verschiedene Lösungen, aber die richtige Methode (oder auf der Suche nach der richtigen Methode) scheint, entzieht sich mir.
Mit freundlichen GRÜßEN, mich.
P. S. Sorry wenn dies eine dumme Frage.
Edit:
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" ist jetzt eine ungültige id, ich werde zurückkehren, um diese kurz. Ich glaube, ich bin aliasing es der falsche Weg, aber ich bin mir nicht sicher. Goign zu finden.
EDIT2:
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'
Werde ich mit dieser syntax, wie es jetzt ist viel sauberer und einfacher zu verstehen als die Vorherige. Aber ich bin immer noch der Begegnung ORA-00904: "rideNumber": Ungültiger Bezeichner (dies wahrscheinlich zählt für shipmentNumber sowie in die join-Linie. Versuchen Sie zu diesem Bild ein, noch, google gibt die Benennung Tipps: kein Erfolg. Noch auf der Suche.
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'
Nun folgende Vorschläge, dies ist die aktuelle syntax. Derzeit gibt die Fehlermeldung:
FEHLER
ORA-00904: "CS"."SHIPMENTNUMBER": Ungültiger Bezeichner
Tut mir Leid, ich habe nicht das design dieser Datenbank> ):
Edit4/Lösung?
Diese scheint zu funktionieren, seltsam genug.
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
- Klausel: ... ON "cef_tsroma"."dosvlg" = "cef_v_cv_shipment"."shipmentNumber"
Ich habe versucht dies, aber es funktioniert auch nicht. FEHLER ORA-00904: "cef_v_cv_shipment"."shipmentNumber": Ungültiger Bezeichner
Mit der Tabelle Aliase
ct
und cs
die join-syntax ist ON ct.dosvlg = cs.shipmentNumber
.Siehe edit3, noch wird ein Fehler zurückgegeben.
Oh dear! Können Sie Abfrage die richtige Schreibweise von Tabellen-und Spaltennamen, bitte?
SELECT table_name, column_name FROM user_tab_columns WHERE UPPER(table_name) IN ('CEF_TSROMA','CEF_V_CW_SHIPMENT');
InformationsquelleAutor Perfection | 2013-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Anführungszeichen sind falsch. "cef_tsroma.tsrido" sollte "cef_tsroma"."tsrido"...
Auf edit2: Die neuen Namen (Aliase) sind nicht affektive in der
WHERE
oderJOIN
- Klausel. Verwenden ein Beispiel, die SpalteX
der TabelleDUAL
können umbenannt werden, die angegangen werden müssen, mit dem alten Namen in derWHERE
Klausel:Auf edit3: Deine Tabellen-und Spaltennamen Aussehen wie normale Oracle-Namen, die groß-und Kleinschreibung. So können Sie entfernen Sie alle doppelten Anführungszeichen:
Zu erklären, in mehr details: Oracle Tabellen-und Spaltennamen sind normalerweise groß-und Kleinschreibung. Oracle speichert Sie in Großbuchstaben, aber Sie können verwenden Sie Kleinbuchstaben, Großbuchstaben oder in beliebigen Kombinationen in die Abfrage.
Dies ändert sich schlagartig, wenn Sie die surround-Tabelle oder Spalte name mit doppelten Anführungszeichen. Dann Oracle besteht auf exakt dieser Schreibweise.
So, in deinem Fall die Tabelle/view
"cef_tsroma"
nicht existiert, abercef_tsroma
oderCEF_TSROMA
oder"CEF_TSROMA"
tut..."cef_v_cw_shipment.shipmentNumber"
Mit diesem code es sagt, dass es nicht finden konnte, die Tabelle oder Sicht.
Die folgende scheint zu funktionieren. Danke. wählen Sie " ct."tsrido", ct."dosvlg", cs."shipmentNumber" als shipmentnumber von "cef_tsroma" ct " left outer join "cef_v_cw_shipment" cs ct."dosvlg" = cs."shipmentNumber", wo ct."tsrido" = '104956';
InformationsquelleAutor wolφi
Sie wickeln die gesamte Tabelle.Spalte mit doppelten Anführungszeichen.
InformationsquelleAutor John Woo
Haben Sie versucht, mit Hilfe von Aliasen für die Tabellen:
wenn Sie entfernen Sie die Anführungszeichen Aliase funktioniert es?
wenn ich entfernen Sie die Anführungszeichen um alle alias', dann wird werfen die gleichen Fehler nur für shipmentNumber statt(oder ersten). wählen Sie ct.tsrido als LKW, ct.dosvlg als rideNumber, cs.shipmentNumber als shipmentNumber von "cef_tsroma" ct " left outer join "cef_v_cw_shipment" cs auf rideNumber = shipmentNumber wo LKW = '104490' gibt FEHLER ORA-00904: "rideNumber": Ungültiger Bezeichner
entfernen Sie den alias ridenumber aus der Verknüpfung und Verwendung der tatsächlichen Spaltennamen. Sie können nicht verwenden Sie einen alias aus einer select-Liste in einem join.
Siehe edit3, ist es immer noch eine Fehlermeldung zurück. FEHLER ORA-00904: "CS"."SHIPMENTNUMBER": Ungültiger Bezeichner
InformationsquelleAutor Taryn