2016-11-08 53 views
1

Oracle 11gデータベースでSQLを使用してXML文書を生成しています。しかし、私はデータベースフィールドに問題があります。なぜなら、タイトルフィールドにはXMLの一部が無効であると思われる文字がたくさんあるからです。できるだけ多くの文字をキャッチしてNULLに変換しようとしています。ORA-31011:XML解析に失敗しました - 無効な文字(oracle sql)

REGEXP_REPLACE (title, '’|£|&|*|@|-|>|/|<|;|\', '', 1, 0, 'i') as title 

パーズの問題が発生しているため、私が見逃した無効な文字がもう1つあるはずです。フィールドを文字列 'Title'(以下のように)に変更すると、このフィールドが失敗していることがわかります。ドキュメントは解析され、正常に動作します。

REGEXP_REPLACE ('title', '’|£|&|*|@|-|>|/|<|;|\', '', 1, 0, 'i') as title 

私は、XMLのバージョン使用している「1.0" エンコーディングを= "UTF-8' 、これを回避する簡単な方法があるか、I 2万枚のレコードから任意の可能性が失敗しているレコードを検索しなければなりませんの。タイトル欄には世界中の曲のタイトルが入っていますが、REGEXP_REPLACEを使ってchar(32)の間の文字の範囲を取得し、この範囲にないものはNULLで置き換えるchar(255)と言うことができます。

ORには別の解決方法があります。

おかげさまで、ありがとうございました

答えて

0

あなたが望む文字だけを保持していると考えましたか?私は、彼らが何であるかを知っているが、XMLで唯一の不正な文字が(属性内だけでなく、"または'&<>をしているこの

REGEXP_REPLACE('title', '[^a-zA-Z0-9 ,.!]', '', 1, 0, 'i') as title 
+0

こんにちは、実際にあなたがゴードン・リノフをやっている以上のものを説明することができ働い

あなたは、Oracleの機能を

例を、このような文字をエスケープすることができますか? –

+0

正規表現は、数字、文字またはスペース、カンマ、ピリオド、または感嘆符ではない文字をすべて検索します。 –

関連する問題