Я действительно не уверен, что происходит на данный момент. Я пытаюсь создать представление, и когда я выполнить запрос ниже:Ошибки Oracle/PHP «Неверный идентификатор»
$view = oci_parse($conn, '
CREATE OR REPLACE VIEW
V_ORD_HISTORY
AS
SELECT
ARCUSTO.ID,
ORDERS.ID,
ORDERS.PONO,
ORDERS.ORDERNO,
ORDERS.DATE_TAKEN,
ORDERS.ARCUSTO_ID,
ORD_DETAIL.ORDERS_ID,
ORD_DETAIL.ID,
ORD_DETAIL.TOTAL_QTY_ORD,
ORD_DETAIL.CUMM_SHIPPED,
ORD_DETAIL.DISCOUNT,
ORD_DETAIL.UNIT_PRICE
FROM
ARCUSTO a,
ORDERS o,
ORD_DETAIL d,
ARINVT i
WHERE
a.ID = o.ARCUSTO_ID
AND
d.ORDERS_ID = o.ID
');
Я получаю ошибку:
ORA-00904: "ORD_DETAIL"."UNIT_PRICE": invalid identifier
И если я пытаюсь удалить ORD_DETAIL.UNIT_PRICE из конец оператора select, то он сообщает мне, что ORD_DETAIL.DISCOUNT - это неверный идентификатор. Какой бы столбец ни был последним в списке, становится недопустимым идентификатором. Если я удалю префикс, чтобы определить, какая таблица, то я получаю столбец двусмысленно определенные ошибки.
Любые идеи?
EDIT 1
Я теперь изменил код на следующее:
$view = oci_parse($conn, '
CREATE OR REPLACE VIEW
V_ORD_HISTORY
AS
SELECT
a.ID as CUSTOMER_ID,
o.ID as ORD_ID,
o.PONO,
o.ORDERNO,
o.DATE_TAKEN,
o.ARCUSTO_ID,
d.ORDERS_ID,
d.ID as DETAIL_ID,
d.TOTAL_QTY_ORD,
d.CUMM_SHIPPED,
d.DISCOUNT,
d.UNIT_PRICE
FROM
ARCUSTO a,
ORDERS o,
ORD_DETAIL d,
ARINVT i
WHERE
CUSTOMER_ID = o.ARCUSTO_ID
AND
ORD_ID = d.ORDERS_ID
');
Но теперь он говорит, что ORD_ID является недопустимым идентификатором. Это его последняя строка статута SQL.
* Никогда * используйте запятые в 'п от'. * Всегда * используйте правильный, явный синтаксис 'JOIN'. –
Подтвердите ссылку на 'UNIT_PRICE' с псевдонимом' d', который вы указали в таблице 'ORD_DETAIL', а не с самим именем таблицы. Если вы хотите получить ссылку на этот столбец с именем таблицы, удалите псевдоним. То же самое касается любого другого столбца, на который ссылается ваш запрос. –
Хорошо, я думаю, что у меня его почти нет. Посмотрите на редактирование # 1 выше. –