0

合計時間を計算し、Oracleデータベース用に作成された時間の構成に応じて値を割り当てるように設計されたクエリがあります。

クエリはNavicatとToadで正常に実行されますが、OCI/PHPを使用してクエリを実行すると次のエラーが発生します。

ORA-00972:識別子が長すぎます

メッセージの意味は理解できますが、30文字を超える識別子はありません。場合によっては、テーブル名のエイリアスを作成しましたが、これは違いはありません。

私のコードは次のとおりです。

$query ="SELECT
   SUM( ROUND((A.SCHED_DATE_TO - A.SCHED_DATE_FROM)* 24, 1 )),
   SUM( CASE WHEN A.ACTION_TYPE_CODE = 'INSV' THEN ROUND((A.SCHED_DATE_TO-A.SCHED_DATE_FROM)* 24, 1)*30 ELSE 42.50 END)
FROM
   WAREHOUSE.DM_DIM_ACTION \"A\",
   WAREHOUSE.DM_FCT_ACTION \"C\", 
   WAREHOUSE.DM_DIM_TECHNICIAN \"B\"
WHERE
   A.SHUB_ID = C.SHUB_ID
   AND C.FK_TECHNICIAN_WID = B.ROW_WID
   AND A.SITE_VISIT_YN = 'Y'
   AND A.ACTION_TYPE_CODE IN('INSV', 'SURV')
   AND A.STATUS_CODE IN('FDSP', 'DISP', 'ASSN')
   AND A.ASSIGNED_CONTRACTOR_CODE = 'NOCO'
   AND TRUNC( A.SCHED_DATE_FROM )= '20-Sep-11'
   AND B.CELL = 'C04'";

   $stid = oci_parse($conn, $sql); if (!$stid) { echo oci_error($conn); $e = oci_error($conn); print htmlentities($e['message']); }
   $r = oci_execute($stid, OCI_DEFAULT); if (!$r) { $e = oci_error($stid); echo htmlentities($e['message']); }
   $planned = oci_fetch_array($stid, OCI_RETURN_NULLS);

私は何を間違っているのですか、そして将来このような問題をさらに診断するために使用できる方法/ツールはありますか?

編集: コメントに従って、私はより大きなフィールドを削除し、クエリを単純化して問題を絞り込んでみました。次のクエリでも同じエラーが発生し、最大のフィールド名が削除されます。

SELECT
   SUM( ROUND((A.SCHED_DATE_TO - A.SCHED_DATE_FROM)* 24, 1 )),
   SUM( CASE WHEN A.ACTION_TYPE_CODE = 'INSV' THEN ROUND((A.SCHED_DATE_TO-A.SCHED_DATE_FROM)* 24, 1)*30 ELSE 42.50 END)
FROM
   WAREHOUSE.DM_DIM_ACTION "A"
WHERE
   AND A.SITE_VISIT_YN = 'Y'
   AND TRUNC( A.SCHED_DATE_FROM )= '20-Sep-11'
4

1 に答える 1

0

問題はSQLの形成ではなく、OCI_parse関数に間違ったクエリ文字列を渡していました。

質問のコードを調べると、定義したばかりの変数で$sqlはなく、渡そうとしていることに気付くでしょう。$query

複数のクエリに注意しすぎることはありません。

于 2011-09-21T13:52:10.943 に答える