XML 문자열을 보유하는 긴 열에서 데이터를 추출하는 방법
-
06-07-2019 - |
문제
여기 내 테이블이 있습니다
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;
/
제휴하지 않습니다 StackOverflow