この時点で何が起こっているのかは本当に分かりません。私は、ビューを作成しようとしている、と私は下のクエリを実行すると: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ステートメントの最後の行です。
を* * 'FROM'句にカンマを使用しないでください。 *常に、適切で明示的な 'JOIN'構文を使用します。 –
テーブル名自体ではなく、 'ORD_DETAIL'テーブルに与えたエイリアス' d 'を持つ 'UNIT_PRICE'への参照を修飾します。その列への参照を表名で修飾する場合は、別名を削除します。クエリで参照されている他の列についても同じです。 –
さて、私はほとんどそれを持っていると思う..上の編集#1を見てください。 –