繁体   English   中英

调试仅在PHP / OCI中发生的Oracle错误

[英]Debugging Oracle Error That Only Occurs With PHP/OCI

我有一个查询,该查询旨在计算总工作时间,并根据为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'

问题不是SQL格式,而是我将错误的查询字符串传递给OCI_parse函数。

如果研究问题中的代码,您会注意到我正在尝试传递$sql ,而不是我刚刚定义的$query变量。

您永远不会对多个查询太过小心!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM