CREATE OR REPLACE TYPE t_clob_tab as table of clob;
declare
l_clob_tab t_clob_tab;
begin
-- collect some data as clobs into a nested table
select
cast(multiset(
select to_clob(object_name)
from dba_objects
where rownum <= 10)
as t_clob_tab)
into l_clob_tab
from dual;
-- show the data
for i in 1 .. l_clob_tab.count
loop
dbms_output.put_line('Clob' || i || ' Value is: ' || l_clob_tab(i));
end loop;
end;
출력 :
이
CAST가 직접 지원하지 않습니다 : LOB 유형에 대한 CAST 기능 지원에 관해서는
Clob1 Value is: C_OBJ#
Clob2 Value is: I_OBJ#
Clob3 Value is: TAB$
Clob4 Value is: CLU$
Clob5 Value is: C_TS#
Clob6 Value is: I_TS#
Clob7 Value is: C_FILE#_BLOCK#
Clob8 Value is: I_FILE#_BLOCK#
Clob9 Value is: C_USER#
Clob10 Value is: I_USER#
LOB 데이터 유형 중 하나. CAST를 사용하여 CLOB 값을 문자 데이터 형식으로 변환하거나 BLOB 값을 RAW 데이터 형식으로 변환하면 데이터베이스는 암시 적으로 LOB 값을 문자 또는 원시 데이터로 변환 한 다음 결과로 값을 대상에 명시 적으로 캐스팅합니다 데이터 형식. 결과 값이 대상 유형보다 큰 경우, 데이터베이스는 오류를 리턴합니다.
이것은 CLOB -> Varchar에서 변환하는 것을 의미하는 것으로 보입니다. 그러나 이미 Clob을 가지고 있다면 컬렉션 (이 경우에는 중첩 테이블)에 넣을 수 있어야합니다.
저는 일반적으로 COLLECT 대신 CAST + MULTISET을 사용합니다. 더 쉽고 까다 롭다고 생각합니다. 나는 당신의 문제가 여기에 COLLECT + CAST가 있다고 생각하는데, CAST 자체가 아니라 (NUMBER 정밀도와 비슷한 문제).
EDIT : 간단한 선택에서 오류없이 사용할 수 있지만 Collect 함수를 사용하여 제안을 제거했습니다. pl/sql에서 사용할 수 없습니다.또한, (SQL 또는 PL/SQL) 위의 CAST + MULTISET 옵션 이외에, 당신은 (PL/SQL에서 어쨌든) 간단하게 수행 할 수 있습니다
select clob_col
bulk collect into l_clob_tab
from t;
희망.
'CLOB' 매개 변수로'COLLECT'를 사용할 수 없으며,'00932 '를 던집니다. 00000 - "일치하지 않는 데이터 유형 : 예상되는 % s에 % s"오류가 있습니다. 적어도 그것은 나를 위해 작동하지 않습니다 ... +1 MULTISET 접근법. –
@PrzemyslawKruglej 감사합니다. 나는 CLOB과 함께 COLLECT를 사용할 수 있지만 CLOB로 CAST + COLLECT를 좋아하지 않는다. 정직해야하는 이유를 모르겠지만 CAST + COLLECT와 관련된 다른 문제가 있으므로 멀티 세트를 사용하지 말고 사용하십시오. – tbone
사용중인 Oracle 버전은 무엇입니까? 나는 최신 11g 릴리즈 중 하나를 가지고 있습니다 ... 수집이 왜 저에게 효과가 없는지 궁금합니다. –