using regexp_substr to extract values from a column containing comma separated values

时间:2019-03-06 11:30:40

标签: sql oracle oracle11g

So I have a table Table1 with following structure

Feed ID      Dsc_Column
    1        a,b,c,d,e
    2        q,w,e,t
    1        z,x,u

I want my results to look like this

Feed ID       Dsc
    1          a
    1          b
    2          q

and so on.

Right now I am using following sql

SELECT feed_id,trim(regexp_substr(Dsc_Column, '[^,]+', 1, LEVEL)) str FROM table1 CONNECT BY instr(Dsc_Column, ',', 1, LEVEL - 1) > 0

this gives me desired results but I am unable to fetch all records. Query keeps on running for long and gives me following error: ORA-01002: fetch out of sequence 01002. 00000 - "fetch out of sequence" *Cause: This error means that a fetch has been attempted from a cursor which is no longer valid. Note that a PL/SQL cursor loop implicitly does fetches, and thus may also cause this error. There are a number of possible causes for this error, including: 1) Fetching from a cursor after the last row has been retrieved and the ORA-1403 error returned. 2) If the cursor has been opened with the FOR UPDATE clause, fetching after a COMMIT has been issued will return the error. 3) Rebinding any placeholders in the SQL statement, then issuing a fetch before reexecuting the statement. *Action: 1) Do not issue a fetch statement after the last row has been retrieved - there are no more rows to fetch. 2) Do not issue a COMMIT inside a fetch loop for a cursor that has been opened FOR UPDATE. 3) Reexecute the statement after rebinding, then attempt to fetch again.

Edit: My tables have huge data in them. The above query is not efficient enough to get me results! Any suggestions on what alternatives I can use? Will XMLTABLE will efficient enough to do such tasks?

0 个答案:

没有答案