我有一个设计为总小时的查询,并根据为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'
答案 0 :(得分:0)
问题不在于SQL形成,而是我将错误的查询字符串传递给OCI_parse
函数。
如果研究问题中的代码,您会注意到我正在尝试传递$sql
,而不是我刚刚定义的$query
变量。
您可以永远小心多次查询!