U moet rijen 1 en 2 selecteren en vervolgens een manier bedenken om de ongewenste voorgaande rijen eruit te filteren - een manier is om aggregatie te gebruiken met een CASE
statement dat alleen overeenkomt met de tweede rij:
Oracle 11g R2 Schema-instellingen :
CREATE TABLE mytable ( myvarraycolumn ) AS
SELECT SYS.ODCINUMBERLIST( 1, 2, 3 ) FROM DUAL UNION ALL
SELECT SYS.ODCINUMBERLIST( 4, 5, 6 ) FROM DUAL;
Query 1 :
SELECT (
SELECT MAX( CASE ROWNUM WHEN 2 THEN COLUMN_VALUE END )
FROM TABLE( t.myvarraycolumn )
WHERE ROWNUM <= 2
) AS second_element
FROM mytable t
| SECOND_ELEMENT |
|----------------|
| 2 |
| 5 |
Het werkt niet omdat:voor de eerste rij in de gecorreleerde binnenquery, ROWNUM
is 1
en uw filter is WHERE ROWNUM = 2
dan reduceert dit tot WHERE 1=2
en het filter komt niet overeen en de rij wordt weggegooid. De volgende rij wordt dan getest tegen een ROWNUM
van 1
(aangezien de vorige rij niet langer in de uitvoer staat en geen rijnummer zal hebben), zal de test opnieuw niet slagen en worden weggegooid. Herhaal, advertentie misselijkmakend en alle rijen mislukken de WHERE
filter en worden weggegooid.