Today when creating a view I kept getting the following error:
SQL Error: ORA-00998: must name this expression with a column alias
My view was something like this:
CREATE OR REPLACE VIEW PROTOCOL_SEGMENT_INFO_VIEW AS
SELECT ROWNUM, T.SEGMENT_ID, T.PROTOCOL_NUMBER, T.PROTOCOL_ID_PREFIX, T.PROTOCOL_ID_SUFFIX, T.MODIFIED_DATE FROM
(
SELECT ANIMAL_REQ_ORDER.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
ANIMAL_SHIPMENT.RECEIVED_DATE MODIFIED_DATE
FROM ANIMAL_SHIPMENT
JOIN ANIMAL_DELIVERY ON ANIMAL_DELIVERY.ANIMAL_DELIVERY_ID = ANIMAL_SHIPMENT.ANIMAL_DELIVERY_ID
JOIN ANIMAL_REQ_ORDER ON ANIMAL_REQ_ORDER.ANIMAL_REQ_ORDER_ID = ANIMAL_DELIVERY.ANIMAL_REQ_ORDER_ID
JOIN SEGMENT ON SEGMENT.SEGMENT_ID = ANIMAL_REQ_ORDER.SEGMENT_ID
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = SEGMENT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
UNION
SELECT CENSUS_TRANSACTION.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
CENSUS_TRANSACTION.CENSUS_DATETIME MODIFIED_DATE
FROM CENSUS_TRANSACTION
JOIN SEGMENT ON SEGMENT.SEGMENT_ID = CENSUS_TRANSACTION.SEGMENT_ID
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = SEGMENT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
UNION
SELECT SEGMENT.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
PROTOCOL_ACCOUNT.CREATED_DATETIME MODIFIED_DATE
FROM PROTOCOL_ACCOUNT
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = PROTOCOL_ACCOUNT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
JOIN SEGMENT ON SEGMENT.PROTOCOL_ID = PROTOCOL.PROTOCOL_ID
) T;
well after a lot of playing around, I realized that it was really the rownum within the view that was missing an alias. So here is what it really should have been:
CREATE OR REPLACE VIEW PROTOCOL_SEGMENT_INFO_VIEW AS
SELECT ROWNUM ROWNUMBER, T.SEGMENT_ID, T.PROTOCOL_NUMBER, T.PROTOCOL_ID_PREFIX, T.PROTOCOL_ID_SUFFIX, T.MODIFIED_DATE FROM
(
SELECT ANIMAL_REQ_ORDER.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
ANIMAL_SHIPMENT.RECEIVED_DATE MODIFIED_DATE
FROM ANIMAL_SHIPMENT
JOIN ANIMAL_DELIVERY ON ANIMAL_DELIVERY.ANIMAL_DELIVERY_ID = ANIMAL_SHIPMENT.ANIMAL_DELIVERY_ID
JOIN ANIMAL_REQ_ORDER ON ANIMAL_REQ_ORDER.ANIMAL_REQ_ORDER_ID = ANIMAL_DELIVERY.ANIMAL_REQ_ORDER_ID
JOIN SEGMENT ON SEGMENT.SEGMENT_ID = ANIMAL_REQ_ORDER.SEGMENT_ID
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = SEGMENT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
UNION
SELECT CENSUS_TRANSACTION.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
CENSUS_TRANSACTION.CENSUS_DATETIME MODIFIED_DATE
FROM CENSUS_TRANSACTION
JOIN SEGMENT ON SEGMENT.SEGMENT_ID = CENSUS_TRANSACTION.SEGMENT_ID
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = SEGMENT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
UNION
SELECT SEGMENT.SEGMENT_ID,
PROTOCOL.PROTOCOL_NUMBER,
PROTOCOL.PROTOCOL_ID_PREFIX,
PROTOCOL.PROTOCOL_ID_SUFFIX,
PROTOCOL_ACCOUNT.CREATED_DATETIME MODIFIED_DATE
FROM PROTOCOL_ACCOUNT
JOIN EFFECTIVE_PROTOCOL_VIEW EPV ON EPV.PROTOCOL_ID = PROTOCOL_ACCOUNT.PROTOCOL_ID
JOIN PROTOCOL ON PROTOCOL.PROTOCOL_ID = EPV.EFFECTIVE_PROTOCOL_ID
JOIN SEGMENT ON SEGMENT.PROTOCOL_ID = PROTOCOL.PROTOCOL_ID
) T;