-1
我正在使用Oracle-10g,即时创建一个需要在输入参数中取前4个值的查询。使用oracle 10g取输入参数中的前4个数值使用oracle 10g
用户会给很多投入,同时运行模块报告,但查询需要,如果用户提供了超过4 如果用户给出小于4或等于4 每个输入取所有的值取前4个值值将由用户以逗号(,)分隔。 用户的输入值是qry中的参数。
我QRY如下:
SELECT C.COUNTRY_NAME,OA.CITY,OA.COUNTRY_CODE,D.DEPARTURE_NO,O.STORER_ORDER_ID
FROM
ORDERS O,
ORDER_ADDRESS OA,
STORE_ADRESS SA,
DEPARTURE D,
SHIPMENT S,
LUID L,
PICKLIST_LINE_PACK_LUID PL,
STORER ST,COUNTRY C
WHERE O.INTERNAL_ORDER_ID=OA.INTERNAL_ORDER_ID
AND O.SHIPMENT_ID=S.SHIPMENT_ID
AND S.DEPARTURE_NO=D.DEPARTURE_NO
AND PL.INTERNAL_ORDER_ID=O.INTERNAL_ORDER_ID
AND PL.PACK_LUID_NO=L.LUID_NO
AND O.STORER_ID=ST.STORER_ID
AND ST.STORE_ID=SA.STORE_ID
and C.COUNTRY_CODE=OA.COUNTRY_CODE
and D.DEPARTURE_NO IN(
CASE WHEN length('9821,9254,225,9821') - nvl(length(replace('9821,9254,225,9821',',')),0) <=3
THEN
9821,9254,225,9821
End
)
这给了我一个错误 “ORA-00905:缺少关键字”
谁能PLSS帮我这个???
由于提前, 普里亚
感谢ü这么多..即时得到一个答案,但部分..这种情况下完美地工作,如果我只有4个输入..如果投入超过4个以上,它的力量给了我一个答案。我的需求是,如果输入超过4,它应该只取前4个值。我试过的qry:CASE WHEN长度('9908,9896,9891,9875,9869') - nvl(长度(替换('9908,9896,9891,9875,9869',',')),0)<= 3 THEN','|| '9908,9896,9891,9875,9869'|| ','END like'%,'|| D.DEPARTURE_NO || ',%' – Priya 2014-12-02 08:20:31
以上尝试过qry不给我一个答案..但我需要显示第4个值的数据 – Priya 2014-12-02 08:24:02
@Priya我已经更新了答案 – Multisync 2014-12-02 08:32:06