OracleのXMLTABLE関数を使用して、コンマ区切りの文字列を行に分割しようとしています。例えば
WITH MYTABLE AS
(SELECT '"AB","PQ","XY"' TEXT FROM DUAL
)
SELECT REPLACE((column_value).GETSTRINGVAL(),'"','') "OPTION_TEXT"
FROM MYTABLE,
XMLTABLE(TEXT);
上記のクエリは正常に機能します。ただし、&を含む文字列が渡されると、次のように例外がスローされます。
java.sql.SQLException:ORA-19112:評価中にエラーが発生しました:
WITH MYTABLE AS
(SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
)
SELECT REPLACE((column_value).GETSTRINGVAL(),'"','') "OPTION_TEXT"
FROM MYTABLE,
XMLTABLE(TEXT);
このクエリは、Javaからプリペアドステートメントを介して実行されていることに注意してください。
問題は、XQuery式の評価にあります。
REGEXP_SUBSTRを使用して、コンマ区切りの文字列を行に分割できます。
このSQLフィドルをチェックしてください
作業デモ:
SQL> WITH mytable AS
2 (SELECT '"AB","P & Q","XY"' TEXT FROM DUAL
3 )
4 SELECT trim(regexp_substr(TEXT, '[^,]+', 1, LEVEL)) TEXT
5 FROM mytable
6 CONNECT BY LEVEL <= regexp_count(TEXT, ',')+1;
TEXT
-----------------
"AB"
"P & Q"
"XY"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加