2012-02-10 2 views
3

원시 데이터 유형의 변수를 비교할 수 있습니까? 내가 XMLDOM.DomNodes 함께 일하고 있어요 그 자체로 하나 개의 필드로 기록되는 : PL/SQL 원시 데이터 유형 변수 비교

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

그래서 내가 두 개의 노드가, 나는 자신의 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 문서에서 한 가지 나를 걱정 : 이 Raw data is like VARCHAR2 data, except that PL/SQL does not interpret raw data 것은 무엇을 의미 하는가? pl/sql이 raw를 해석하지 않으면 비교할 수 있습니까?

답변

4

두 개의 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는 문자열 대신 문자열입니다.

2

문서가 의미하는 바는 모르겠지만 두 원시를 비교하려면 UTL_RAW.COMPARE 함수를 사용하십시오. 자세한 내용은 here을 참조하십시오.

UTL_RAW.COMPARE는 원시 값 하나를 다른 원시 값과 비교합니다. 이들이 인 경우 UTL_RAW.COMPARE는 0을 반환합니다. 이 아닌 경우 COMPARE는 이 일치하지 않는 첫 번째 바이트의 위치를 ​​반환합니다. 입력 값의 길이가 다른 경우 의 값이 더 짧아 질수록 짧은 입력 값이 오른쪽에 채워집니다.

+0

= 나는 연산자도 원시를 비교할 수 있지만, 그것이 잘못되면, 나는 당신의 충고를 사용할 것입니다. 감사 –

-1

당신은 사용해야합니다

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

오라클은 제대로 빈/널 (null) 문자열을 비교하지 않는다, 그래서 당신은 null 또는 비어있는 경우, 다음 그것을 다른과는 다른 의미를 부여하도록 지정해야합니다.