以下のリクエストはまさに私が望んでいることですが、フィールド Author_ID と Author_Name が VARCHAR であり、それらの値が次の表のように星で区切られている場合にのみ実行されます。
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02*03*04 | AuthorX*AuthorY*AuthorZ |
-----------------------------------------------
リクエストにより、次の結果が得られます。
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02 | AuthorX |
-----------------------------------------------
002 |03 | AuthorY |
-----------------------------------------------
002 |04 | AuthorZ |
-----------------------------------------------
しかし実際には、これらの 2 つのフィールドは CLOB であり、星の区切り記号はなく、ワードラップの区切り記号があるため、実際のデータは次のようになります。
ID_BOOK | ID_AUTHOR | NAME AUTHOR |
-----------------------------------------------
001 |01 | AuthorU |
-----------------------------------------------
002 |02*03*04 | AuthorXAuthorYAuthorZ |
CLOB では REGEXP_SUBSTR を使用できず、wordrap デリミネータの処理方法がわからないため、Varchar フィールドと星形デリミネータで得た結果と同じ結果を得ようとしています。ヒントを教えてください。どうもありがとう。
SELECT
ID_Book,
REGEXP_SUBSTR(ID_Author, '[^*]+', 1, Counter) AS AuthID,
REGEXP_SUBSTR(Name_Author, '[^*]+', 1, Counter) AS AuthName
FROM Books
CROSS JOIN (
SELECT LEVEL Counter
FROM DUAL
CONNECT BY LEVEL <= (
SELECT MAX(REGEXP_COUNT(ID_Author, '[^*]+'))
FROM Books))
WHERE REGEXP_SUBSTR(Name_Author, '[^*]+', 1, Counter) IS NOT NULL
ORDER BY 1, 2