ORA-01722:通过pro * C执行查询时的编号无效

时间:2014-08-12 12:54:01

标签: oracle

我正面临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)

0 个答案:

没有答案