문제

여기 내 테이블이 있습니다

MYTABLE(ID NUMBER(10),
        DATATYPE VARCHAR2(2 BYTE),
        XMLDATA LONG
)

Note1 :이 표 2를 변경할 수 없습니다. Note2 : Oracle 10G를 사용하고 있습니다.

다음은 xmldata의 샘플입니다

<myxml version="1">
  <node1>
   <child1>value to get</child1>
  </node1>
</myxml>

xmltype ()를 시도했지만 긴 유형 (ORA-00997 불법 사용 긴 유형)으로 작동하지 않습니다. 어쩌면 xmldata 값을 새 테이블에 복사하고 클로브로 변환 한 다음 xmltype로 변환하여 사용할 수 있습니다. ExtractValue ()?

'값을 얻을 수있는'가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

다음은 임의의 길이의 긴 길이에서 클로브를 출력 해야하는 일부 코드입니다. 그것은 몸을 버린다 MY_TRIGGER 에게 dbms_output. 그것이 작동하면 필요에 따라 그것을 구문 분석 할 수 있어야합니다.

DECLARE
    c_chunk_limit CONSTANT   INTEGER := 100;

    v_cur                    INTEGER := DBMS_SQL.open_cursor;
    v_offset                 INTEGER;
    v_chunk                  VARCHAR2(32767);
    v_chunk_size             INTEGER;
BEGIN
    DBMS_SQL.parse(
        v_cur,
        'SELECT trigger_body FROM dba_triggers WHERE trigger_name = ''MY_TRIGGER''',
        DBMS_SQL.native
    );

    DBMS_SQL.define_column_long(v_cur, 1);  -- 1 here represents the column position in the select list the long is column#1

    IF DBMS_SQL.execute_and_fetch(v_cur) > 0
    THEN
        v_offset   := 0;

        LOOP
            DBMS_SQL.column_value_long(
                v_cur,
                1,  -- 1 here represents the column position in the select list the long is column#1
                c_chunk_limit,
                v_offset,
                v_chunk,
                v_chunk_size
            );

            EXIT WHEN v_chunk_size = 0;

            v_offset   := v_offset + v_chunk_size;
            DBMS_OUTPUT.put_line(v_chunk);
        END LOOP;
    END IF;

    DBMS_SQL.close_cursor(v_cur);
END;
/
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top