ORA-00932: 일치하지 않는 데이터 유형: 예상됨 - CLOB가 있음
그 점을 고려하면TEST_SCRIPT는 입니다.CLOBOracle 상에서 SQL*PLUS에서 이 간단한 쿼리를 실행하면 다음과 같은 오류가 발생하는 이유:
ORA-00932: inconsistent datatypes: expected - got CLOB
동일한 오류에 대한 질문을 많이 읽었지만 SQLPLUS에서 직접 쿼리를 실행하는 질문은 없습니다.
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE TEST_SCRIPT = 'something'
AND ID = '10000239'
완전한 예:
SQL> create table ims_test(
2 test_category varchar2(30),
3 test_script clob,
4 id varchar2(30)
5 );
Table created.
SQL> insert into ims_test values ('test1','something','10000239');
1 row created.
SQL> UPDATE IMS_TEST
2 SET TEST_Category = 'just testing'
3 WHERE TEST_SCRIPT = 'something'
4 AND ID = '10000239';
WHERE TEST_SCRIPT = 'something'
*
ERROR at line 3:
ORA-00932: inconsistent datatypes: expected - got CLOB
WHERE 절에는 CLOB를 넣을 수 없습니다.매뉴얼에서 다음 항목을 참조하십시오.
비교 조건에서는 Large Object(LOB; 큰 개체)는 지원되지 않습니다.그러나 PL/SQL 프로그램을 사용하여 CLOB 데이터를 비교할 수 있습니다.
값이 항상 4k 미만인 경우 다음을 사용할 수 있습니다.
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE to_char(TEST_SCRIPT) = 'something'
AND ID = '10000239';
어쨌든 CLOB로 검색하는 것은 이상합니다.그냥 아이디 칸으로 검색해주시면 안 될까요?
할 때도 같은 에러가 발생합니다.SELECT DISTINCT ..., <CLOB_column>, ....
이 CLOB 컬럼에 사용할 수 있는 모든 행에서 VARCHAR2의 제한보다 짧은 값이 포함되어 있는 경우to_char(<CLOB_column>)또는, 복수의 콜의 결과를 접속합니다.DBMS_LOB.SUBSTR(<CLOB_column>, ...).
CLOB의 기판을 가져와서 char로 변환합니다.
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE to_char(substr(TEST_SCRIPT, 1, 9)) = 'something'
AND ID = '10000239';
방금 이걸 봤는데 우연히 CLOBs를 비슷한 쿼리에서 사용할 수 있다는 걸 알게 됐어요.
UPDATE IMS_TEST
SET TEST_Category = 'just testing'
WHERE TEST_SCRIPT LIKE '%something%'
AND ID = '10000239'
이는 4K 이상의 CLOB에도 유효합니다.
퍼포먼스가 좋지는 않겠지만 제 경우에는 문제가 없었습니다.
저는 그 선택지가clobCTE의 컬럼이 이 폭발을 일으켰습니다.즉,
with cte as (
select
mytable1.myIntCol,
mytable2.myClobCol
from mytable1
join mytable2 on ...
)
select myIntCol, myClobCol
from cte
where ...
아마도 오라클이 임시 테이블에서 클롭을 처리할 수 없기 때문일 겁니다.
내 값이 4K보다 길어서 사용할 수 없었다.to_char().
기말고사에서 고르는 거였는데select(즉,
with cte as (
select
mytable1.myIntCol
from mytable1
)
select myIntCol, myClobCol
from cte
join mytable2 on ...
where ...
이로 인해 성능 문제가 발생할 경우 유감입니다.
이 문제는 CLOB 유형의 컬럼과 조합하여 선택한 늘 값에 있을 수 있습니다.
select valueVarchar c1 ,
valueClob c2 ,
valueVarchar c3 ,
valueVvarchar c4
of Table_1
union
select valueVarchar c1 ,
valueClob c2 ,
valueVarchar c3 ,
null c4
of table_2
나는 커서를 재작업했다.첫 번째 커서는 Null이 아닌 4개의 열로 구성됩니다.두 번째 커서는 Null이 아닌 세 개의 열을 선택합니다.null 값이 cursor For Loop에 삽입되었습니다.
제 경우 Entity Framework를 사용하고 있었는데 사용하려고 했던 컬럼이value- 즉, oracle에 의해 예약된 키워드.
언급URL : https://stackoverflow.com/questions/12980038/ora-00932-inconsistent-datatypes-expected-got-clob
'programing' 카테고리의 다른 글
| 요청 헤더 jQuery Ajax 설정 (0) | 2023.03.26 |
|---|---|
| React와 함께 Redx의 프로바이더를 사용하는 방법 (0) | 2023.03.26 |
| Spring Boot에서 여러 데이터 소스 및 스키마 (0) | 2023.03.26 |
| 리액트 라우터:경로를 찾을 수 없습니다. (0) | 2023.03.26 |
| 웹 팩을 사용하여 디렉토리에서 동적으로 이미지 가져오기 (0) | 2023.03.26 |