긴 길이를 Varchar2로 변환
긴 열에서 varchar2 열에 삽입하려고 합니다.다음은 예입니다.TEXT.TEXT_COL = VARCHAR2(4000)그리고.NOTE.TEXT_NOTE = LONG.
INSERT INTO TEXT(ROW_ID, TEXT_COL)
SELECT 1, TEXT_NOTE FROM NOTE;
위의 SQL을 실행하면 오류가 발생합니다.
SQL 오류: ORA-00997: LONG 데이터 유형의 잘못된 사용
사용한TO_LOB()역시, 하지만 여전히 같은 오류입니다.
간단히 커버할 수 있는 기능이 있습니까?long그리고 그것을 넣습니다.varchar2당신의 생각을 알려주세요.
변환 대상long로.varchar2단일 문을 바로 사용하는 것은 불가능합니다.long에는 특정한 제한이 있습니다.
임시 테이블을 만들거나 PL/SQL 코드를 사용하여 문제를 해결할 수 있습니다.
임시 테이블:
CREATE TABLE TABLE2 AS SELECT TO_LOB(COLUMN1) COLUMN FROM TABLE1;PL/SQL 코드:
DECLARE VAR1 LONG; VAR2 VARCHAR2(4000); BEGIN SELECT TEXT INTO VAR1 FROM USER_VIEWS WHERE ROWNUM = 1; VAR2 := SUBSTR(VAR1, 1, 4000); DBMS_OUTPUT.PUT_LINE(VAR2); END;
루프에서 LONG을 선택하면 Oracle이 내부적으로 LONG을 다른 것(아마도 CLOB)으로 변환하는 것처럼 보입니다.Oracle 설명서에서 아무런 설명도 찾지 못했지만 이는 작동합니다.
BEGIN
FOR V IN (SELECT ROWID,TEXT_NOTE FROM NOTE)
LOOP
INSERT INTO TEXT VALUES(V.ROWID, SUBSTR(V.TEXT_NOTE, 1, 4000) );
END LOOP;
COMMIT;
END;
다음은 다른 스키마의 모든 보기를 스키마로 복사하는 방법의 예입니다.
BEGIN
FOR V IN (SELECT VIEW_NAME, TEXT_LENGTH, TEXT FROM ALL_VIEWS WHERE OWNER = 'PROD')
LOOP
EXECUTE IMMEDIATE 'CREATE OR REPLACE FORCE VIEW '||V.VIEW_NAME||' AS '||SUBSTR(V.TEXT, 1, V.TEXT_LENGTH);
DBMS_OUTPUT.PUT_LINE('View '||V.VIEW_NAME||' created');
END LOOP;
END;
어떤 이유로 인해 FOR 루프에서만 작동하며 WITH를 사용하거나 다른 쿼리에서 선택하면 작동하지 않습니다.
INSERT INTO TEXT
WITH V AS(SELECT ROWID ROW_ID,TEXT_NOTE FROM NOTE)
SELECT V.ROW_ID, SUBSTR(V.TEXT_NOTE, 1, 4000) FROM V;
INSERT INTO TEXT
SELECT ROW_ID, SUBSTR(TEXT_NOTE, 1, 4000)
FROM (SELECT ROWID ROW_ID,TEXT_NOTE FROM NOTE);
두 인서트 모두 동일한 오류가 발생
ORA-00932: 일관성 없는 데이터 유형: 예상된 CHAR이 길어졌습니다.
표준 함수를 사용하여 long을 varchar2로 변환할 수 있습니다.
sys.DBMS_METADATA_UTIL.long2varchar
또는 클로브:
sys.DBMS_METADATA_UTIL.long2clob
언급URL : https://stackoverflow.com/questions/31004844/converting-long-to-varchar2
'programing' 카테고리의 다른 글
| Office Interop을 사용하여 Excel에 셀을 쓰는 가장 빠른 방법은 무엇입니까? (0) | 2023.08.20 |
|---|---|
| 플렉스 1의 의미는 무엇입니까? (0) | 2023.08.20 |
| CG 플로트를 스위프트에 캐스팅 (0) | 2023.08.15 |
| 성능 카운터에 액세스할 때 "레지스트리 키 'Global'에 대한 액세스가 거부됨" (0) | 2023.08.15 |
| mysql - DESCRIBE 테이블의 결과를 테이블에 저장하는 방법 (0) | 2023.08.15 |