3

DBにvarchar2列があります。また、この列には文字列がxml形式で格納されます。ただし、すべての文字列が整形式のxmlであるとは限りません(一部に誤りがあります)。この文字列が整形式のxmlであるかどうかを確認するにはどうすればよいですか?

この文字列が整形式のxmlでない場合、次のようなsql-queryは実行時に失敗します。

   select 
       extractvalue(xmltype(some_table.value), 'Attachment/@category')
   from some_table

Xmlの形式は次のとおりです。

   <Attachment {attributes} />

各文字列の属性の数は異なる場合があります。

したがって、「asdf」のような文字列が発生しても、クエリは失敗しません。

4

2 に答える 2

7

これをチェックする簡単な関数を次に示します。

CREATE OR REPLACE FUNCTION isXML(xml CLOB)
RETURN NUMBER
AS
  xmldata XMLTYPE;
BEGIN
  xmldata := XMLTYPE(xml);
  return 1;
EXCEPTION
  when others then
    return 0;
END;
/

次のように使用できます。

SQL> SELECT isXML('fdjkasksdf') FROM DUAL;

ISXML('FDJKASKSDF')
-------------------
                  0

SQL> SELECT isXML('<body></body>') FROM DUAL;

ISXML('<BODY></BODY>')
----------------------
                     1    
于 2012-09-28T14:12:38.283 に答える
0

OracleSQL関数XMLIsValidとXMLTypeメソッドIsSchemaValid()
検証プロセスを無条件に実行します。検証ステータスを記録しないでください。戻り値:

  • ドキュメントが有効であると判断された場合は1。
  • ドキュメントが無効であると判断された場合、またはドキュメントの有効性を判断できない場合は0。

XMLTypeメソッドSchemaValidate()
検証ステータスが0の場合、検証プロセスを実行します。これはデフォルトです。ドキュメントが有効であると判断された場合、検証ステータスを1に設定します。(それ以外の場合、ステータスは0のままです。)

XMLTypeメソッドisSchemaValidated()は、XMLTypeインスタンスの記録された検証ステータスを返します。

XMLTypeメソッドsetSchemaValidated()は、XMLTypeインスタンスの検証ステータスを設定(記録)します。

このリンクを参照してください

于 2012-09-28T11:34:00.027 に答える