我正面临ORA-1772:当查询通过pro * c文件运行时,一次又一次无效的数字。 直接在pl / sql开发人员上执行时,相同的查询工作正常。
SELECT queue_entry_id ,queue_urgency,
TO_CHAR (chg_dt, 'MM-DD-YY'),
TO_CHAR (queue_after_dt, 'MM-DD-YY'),
chg_who ,
upd_cnt FROM BSD_QUEUE_WORK WHERE queue_entry_id IN (
SELECT queue_entry_id FROM (
SELECT /*+ INDEX (bsd_queue_work bsd_q_wrk_dt_idx) */
BSD_QUEUE_WORK.queue_entry_id
FROM BSD_QUEUE_WORK WHERE BSD_QUEUE_WORK.queue_after_dt <= SYSDATE
order by BSD_QUEUE_WORK.queue_urgency DESC, BSD_QUEUE_WORK.queue_after_dt)
WHERE rownum <=20) FOR UPDATE;
旧查询看起来像 -
SELECT
/*+ INDEX (bsd_queue_work bsd_q_wrk_dt_idx) +*/
BSD_QUEUE_WORK.queue_entry_id,
TO_CHAR(BSD_QUEUE_WORK.chg_dt,:b0) ,
TO_CHAR( BSD_QUEUE_WORK.queue_after_dt,:b0) ,
BSD_QUEUE_WORK.chg_who ,
BSD_QUEUE_WORK.upd_cnt
FROM BSD_QUEUE_WORK
WHERE (BSD_QUEUE_WORK.queue_after_dt<=SYSDATE
AND ROWNUM <=:b2)
ORDER BY BSD_QUEUE_WORK.queue_urgency DESC BSD_QUEUE_WORK.queue_after_dt FOR UPDATE
此查询首先选择20行,然后在queue_urgency上对它们进行排序。如果我们总共有10k行,这导致高紧急行等待轮到他们。并且,User希望首先找出高queue_urgency行,并以20行的块来处理它们。因此,我创建了新的查询,如上所述给出错误。
请你帮我解决一下这个问题。 表结构如下 - SQL&GT; desc bsd_queue_work
Name Null? Type
----------------------------------------- -------- ----------------------------
QUEUE_ENTRY_ID NOT NULL NUMBER(18)
QUEUE_AFTER_DT NOT NULL DATE
UPD_CNT NOT NULL NUMBER(6)
CHG_WHO NOT NULL VARCHAR2(32)
CHG_DT NOT NULL DATE
QUEUE_URGENCY NOT NULL NUMBER(38)