这可以通过单个SQL查询完成,例如。
WITH mydata AS
(SELECT 1 AS id, 'Sudan China USA Africa' AS string FROM dual
UNION ALL
SELECT 2 , 'China Europe Sudan Asia' FROM dual
)
, lookup AS
(SELECT 'Sudan' AS word FROM dual
UNION ALL
SELECT 'China' FROM dual
UNION ALL
SELECT 'USA' FROM dual
)
SELECT t.id
, max(t.word) KEEP (DENSE_RANK LAST ORDER BY t.pos) lastword
FROM (SELECT mydata.id
, pos.column_value AS pos
, regexp_substr(mydata.string, '([^ ])+', 1, pos.column_value ) AS word
FROM mydata
CROSS JOIN
TABLE
(CAST
(MULTISET
(SELECT level
FROM dual
CONNECT BY level <= regexp_count(mydata.string, '([^ ])+')
) AS sys.odciNumberList
)
) pos) t
INNER JOIN lookup l
ON (t.word = l.word)
GROUP BY t.id
ID LASTWORD
---------- -----------------------
1 USA
2 Sudan