프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS 환경 : Oracle Linux 8.4 (64bit)

 

DB 환경 : Oracle Database 23.4.0.24.05 ai Free

 

에러 : ORA-63805: Maximum number of tuples in Table Value Constructor exceeded

Table Value Constructor 방식으로 insert into values 절에 값을 최대갯수 이상(65535)으로 넣을떄 발생하는 에러

샘플 테이블 생성

1
2
3
SQL> 
drop table t1 purge;
create table t1 (col1 number);

 

 

샘플 데이터 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SQL> 
DECLARE
    v_sql clob;
BEGIN
    v_sql := 'INSERT INTO t1 VALUES ';
    
    FOR i IN 1..65535 LOOP
        IF i > 1 THEN
            v_sql := v_sql || ',';
        END IF;
        v_sql := v_sql || '(1)';
    END LOOP;
    
    EXECUTE IMMEDIATE v_sql;
    
    DBMS_OUTPUT.PUT_LINE('Insertion complete');
END;
/
 
DECLARE
*
ERROR at line 1:
ORA-63805: Maximum number of tuples in Table Value Constructor exceeded
ORA-06512: at line 13
Help: https://docs.oracle.com/error-help/db/ora-63805/

 

 

 

해결 방법 : Table Value Constructor 최대값 이하로 insert

Table Value Constructor 방식의 최대값 이하로 insert 해야함
65535가 아닌 65534까지는 데이터가 정상적으로 insert 됨

 

 

샘플 데이터 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SQL> 
DECLARE
    v_sql clob;
BEGIN
    v_sql := 'INSERT INTO t1 VALUES ';
    
    FOR i IN 1..65534 LOOP
        IF i > 1 THEN
            v_sql := v_sql || ',';
        END IF;
        v_sql := v_sql || '(1)';
    END LOOP;
    
    EXECUTE IMMEDIATE v_sql;
    
    DBMS_OUTPUT.PUT_LINE('Insertion complete');
END;
/
 
PL/SQL procedure successfully completed.

정상적으로 insert됨

 

 

원인 : Table Value Constructor 제약문제

Table Value Constructor 제약문제

제약조건을 확인한 뒤 기능을 사용해야함

 

 

참조 : 

https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1711
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/IN-Condition.html#SQLRF-GUID-C7961CB3-8F60-47E0-96EB-BDCF5DB1317C