Unsure as to why I am receiving an "invalid identifier" error - sql

After joining three tables, I am unable to call the column "shipping_id" from the "shipment" table.
I've tried re-ordering my joins and other ways of calling the column
SELECT shipment.shipping_id (date_of_delivery-order_date) AS "Length of Delivery",
damaged, inventory.product_id, name_of_product, price
FROM shipment
JOIN orders
ON orders.shipping_id = shipment.shipping_id
JOIN inventory
ON inventory.product_id = orders.product_id
If i remove the first SELECT entry "shipment.shipping_id", the query runs fine. I am receiving this error...
ORA-00904: "SHIPMENT"."SHIPPING_ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 1 Column: 8

Missing comman after shipping_id. Since you're joining on shipping_id, there is no need to qualify the reference. There is only a single shipping_id column in the result.

Related

ORA-00907: missing right parenthesis 00907. 00000 - "missing right parenthesis", while on a subquery with all parenthesis matching

Hi I have been trying to do a subquery using 2 tables and when I try to run the following code:
select t.cantidad_traslado,
(select sum(te.coste)"Coste",
(case when te.nif_emptransporte='F-98987667-R' then'AceSur'
when te.nif_emptransporte='A-98985367-V' then'TransMadrid'
when te.nif_emptransporte='A-97654567-S' then'Perez e Hijos'
when te.nif_emptransporte='A-87684567-B' then'Resur'
when te.nif_emptransporte='A-98987067-V' then'HuelResi'
else 'Indefinido'
end)"Empresa"
from traslado_empresatransportista te
group by te.nif_emptransporte
where t.nif_empresa=te.nif_empresa)
from traslado t
where t.nif_empresa in (select distinct nif_empresa from traslado_empresatransportista)
but when I try to run it oracle shows me the following error:
ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
Error at Line: 12 Column: 9.
I am pretty sure I have all of my parenthesis right, so I wanted to know if yall could help me.
Edit:
Someone suggestes I swapped the order between the where and group by clause like this:
select t.cantidad_traslado,
(select sum(te.coste)"Coste",
(case when te.nif_emptransporte='F-98987667-R' then'AceSur'
when te.nif_emptransporte='A-98985367-V' then'TransMadrid'
when te.nif_emptransporte='A-97654567-S' then'Perez e Hijos'
when te.nif_emptransporte='A-87684567-B' then'Resur'
when te.nif_emptransporte='A-98987067-V' then'HuelResi'
else 'Indefinido'
end)"Empresa"
from traslado_empresatransportista te
group by te.nif_emptransporte
where t.nif_empresa=te.nif_empresa)
from traslado t
where t.nif_empresa in (select distinct nif_empresa from traslado_empresatransportista)
When I did I was presented the following error:
ORA-00913: too many values
00913. 00000 - "too many values"
*Cause:
*Action:
From Oracle 12, you can use a LATERAL join and then return multiple columns from the joined table:
select t.cantidad_traslado,
te.*
from traslado t
CROSS JOIN LATERAL (
select sum(te.coste) AS "Coste",
case
when te.nif_emptransporte='F-98987667-R' then'AceSur'
when te.nif_emptransporte='A-98985367-V' then'TransMadrid'
when te.nif_emptransporte='A-97654567-S' then'Perez e Hijos'
when te.nif_emptransporte='A-87684567-B' then'Resur'
when te.nif_emptransporte='A-98987067-V' then'HuelResi'
else 'Indefinido'
end AS "Empresa"
from traslado_empresatransportista te
where t.nif_empresa=te.nif_empresa
group by te.nif_emptransporte
) te

ORA-00904: "EVENTPLAN"."LINENO": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause: *Action: Error at Line: 16 Column: 5

For each event plan, list the plan number, count of the event plan lines, and sum of the number of resources assigned. For example, plan number “P100” has 4 lines and 7 resources assigned. You only need to consider event plans that have at least one line.
Here is my answer for this :
select DISTINCT planno, count(lineno), sum(resno)
from eventplanline, eventplan, resourcetbl
where resourcetbl.resno = eventplanline.resno
and eventplan.lineno =eventplanline.lineno;
ORA-00904 error message is a invalid identifier message.
SQL statement that included an invalid column name or referance an invalid alias get an probably ORA-00904 error. Please check EVENTPLAN table has contains LINENO column.

View update raises ORA-01733

I created a view and then I want to update the cost and show the error. But it reterns that virtual column not allowed.
View:
CREATE OR REPLACE VIEW CONCERT_EVENTS1 AS
SELECT CONCERT.CONCERT_ID, EVENT.EVENT_ID, CONCERT.NAME, EVENT.DATE1 , CONCERT.DURATION,
CONCERT.TYPE, TO_CHAR(CONCERT.COST, 'L9,999.99') AS FORMATED_COST
FROM EVENT
INNER JOIN CONCERT
ON CONCERT.CONCERT_ID = EVENT.CONCERT_ID;
Below is the error:
Error starting at line 1 in command:
UPDATE CONCERT_EVENTS1
SET formated_cost = '300.00'
WHERE formated_cost = '200.00'
Error at Command Line:2 Column:5
Error report:
SQL Error: ORA-01733: virtual column not allowed here
01733. 00000 - "virtual column not allowed here"
*Cause:
*Action:
Thanks in advance
FORMATED_COST is probably a calculated field, or in any case the
database cannot infer what change is to be made to the tables
underlying the view based on the change you are requiring.
Include an extra column in your view on CONCERT.COST without the formatting. And update only that new column. The explanation of why this is needed is given by Vignesh Kumar.

Oracle CONTAINS Giving Invalid Identifier ORA-00904

So I have a webapp that takes in a string where ID elements are broken up by '-' (e.g. someid1-someid2). I then convert the string to something like someid1 OR someid2. This in theory according to Oracle's doc's should allow me to then do something like
SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2') > 0;
However I'm getting the following error when running the sample query in SQL Dev:
ORA-00904: "CONTAINS": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
The version of Oracle is Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production of which the documentation is for, so I don't see why CONTAINS would be considered an invalid identifier. Adding the other optional parameter
SELECT somecol1, somecol2 FROM sometable WHERE CONTAINS (somecol1, 'someid1 OR someid2', 1) > 0;
also gives the same error. What am I/it doing wrong here?
EDIT:
'Working Code' as per request although arguably it isn't working
SELECT tech, product FROM tech_det_view WHERE CONTAINS (tech, 'test OR qual') > 0;
You should create oracle text index before using CONTAINS function
CREATE INDEX idxName ON tableName(columnName) INDEXTYPE IS CTXSYS.CONTEXT;
Here you can find more information about Oracle Text.

Oracle SQL Create View invalid identifier

I'm needing to create view where I basically have to combine three tables in order to see when a contact was last verified. This is the code I have so far:
CREATE VIEW P_PHONECONTACT_VERIFICATION_V AS
SELECT OW.LASTNAME, OW.FIRSTNAME, OW.EMAIL,
OP.PHONE_CONTACTID, OP.PHONENUM, OP.PHONETYPE,
OC.LAST_DATE_VERIFIED AS VERIFIED_ON
FROM P_OWNER OW
LEFT JOIN P_OWNERCONTACT OC
ON OW.OWNERID = OC.OWNERID
LEFT JOIN P_OWNERPHONE OP
ON OC.CONTACTID = OP.PHONE_CONTACTID
WHERE VERIFIED_ON IS NULL OR
VERIFIED_ON > SYSDATE-365
ORDER BY LASTNAME;
I keep getting this error and can't figure out why.
Error at Command Line:10 Column:7
Error report:
SQL Error: ORA-00904: "VERIFIED_ON": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
If anyone could help I would greatly appreciate it.
You are using verified_on in the where clause. I think you need last_date_verified instead:
CREATE VIEW P_PHONECONTACT_VERIFICATION_V AS
SELECT
OW.LASTNAME, OW.FIRSTNAME, OW.EMAIL,
OP.PHONE_CONTACTID, OP.PHONENUM, OP.PHONETYPE,
OC.LAST_DATE_VERIFIED AS VERIFIED_ON
FROM P_OWNER OW LEFT JOIN P_OWNERCONTACT OC
ON OW.OWNERID = OC.OWNERID
LEFT JOIN P_OWNERPHONE OP
ON OC.CONTACTID = OP.PHONE_CONTACTID
WHERE OC.LAST_DATE_VERIFIED IS NULL OR
OC.LAST_DATE_VERIFIED > SYSDATE-365
ORDER BY LASTNAME;
You can't use a column alias defined in the select clause in the where clause.