4

生データ型の変数を比較することは可能ですか? 私は XMLDOM.DomNodes を使用しています。これは、1 つのフィールドを持つレコードです。

TYPE DOMNode IS RECORD (id RAW(12));

2 つのノードがあるので、id フィールドで比較できますか? いくつかのサンプルを試してみましたが、一見するとうまくいくようです:

  FUNCTION findParentNode(p_node IN xmldom.domnode) RETURN PLS_INTEGER
  AS
      nRetVal               PLS_INTEGER;
  BEGIN
     FOR i IN ParentNodes.First .. ParentNodes.Last
     LOOP 
         IF ParentNodes(i).id = p_node.id THEN               
            nRetVal := i;
            EXIT;
         END IF;         
     END LOOP;

     RETURN nRetVal;
  END;

しかし、Oracle のドキュメントで気になる点が 1 つあります。 生データは VARCHAR2 データに似ていますが、PL/SQL は生データを解釈しない点が異なります 。pl/sql が raw を解釈しない場合、比較できますか?

4

3 に答える 3

6

=2 つの RAW 変数が同じ値を持つかどうかを確認する場合は、演算子を使用できます。

SQL> DECLARE
  2     a RAW(255) := utl_raw.cast_to_raw('abcdef');
  3     b RAW(50) := utl_raw.cast_to_raw('abcdef');
  4  BEGIN
  5     IF a = b THEN
  6        dbms_output.put_line('a = b');
  7     ELSE
  8        dbms_output.put_line('a != b');
  9     END IF;
 10  END;
 11  /
a = b

ドキュメントに RAW は VARCHAR2 に似ているが解釈されないと記載されている場合は、VARCHAR2 と同じように RAW 変数に影響を与え、保存し、比較することもできますが、バイナリ値は文字セットと照合されることはありません。

一方、VARCHAR2 変数は、データベースとクライアントの文字セットが一致しないために変換される可能性があります。

RAW は、文字列ではなくバイト列です。

于 2012-02-10T09:10:44.693 に答える
-1

以下を使用する必要があります。

IF(NVL(a,'X') != NVL(b,'Y')) THEN
.....

Oracle は空/null 文字列を正しく比較しないため、null または空の場合は、他の意味とは異なる意味を与えるように指定する必要があります。

于 2013-02-14T21:50:15.587 に答える