저는 teradata를 처음 사용합니다. 나는 아래와 같이 테이블 test_seq
에 1부터 1000까지의 숫자를 삽입하고 싶습니다.재귀 쿼리의 숫자 오버플로 : Teradata
create table test_seq(
seq_id integer
);
이 사이트에서 검색 한 후 recusrive 쿼리를 사용하여 숫자를 삽입했습니다.
insert into test_seq(seq_id)
with recursive cte(id) as (
select 1 from test_dual
union all
select id + 1 from cte
where id + 1 <= 1000
)
select id from cte;
test_dual
은 다음과 같이 만들어지며 하나의 값만 포함합니다. (오라클의 DUAL 같은)
create table test_dual(
test_dummy varchar(1)
);
insert into test_dual values ('X');
하지만, 내가 삽입 문을 실행하면 다음과 같은 에러가 발생,
Failure 2616 Numeric overflow occurred during computation.
은 내가 여기에 잘못 했는가? integer
데이터 유형이 숫자 값 1000을 저장할만큼 충분하지 않습니까? 또한, 내가 test_dual
테이블을 없앨 수 있도록 쿼리를 작성하는 방법이 있습니까?
우수. 고맙습니다. – Noel
BYTEINT 것은 정말 유익한 데, 정말 고마워요. 재귀 sql은 항상 from 절을 주장합니다. 나는 왜 teradata가 이중과 같은 것이 아닌지 궁금합니다. –
@etl_devs :'select 1;'이 Teradata에서 유효하기 때문에 이중 테이블이 필요 없습니다. 그러나 UNION과 같은 집합 연산을 추가 할 때 그들은 표준 SQL 호환 규칙을 사용하기 시작했습니다.이 규칙에는'FROM'이 필요합니다. . 더미 (dummy)를 만들 수 있습니다. 예약어이므로'DUAL '로 이름을 지우지 말고,''DUAL''으로 작성해야합니다 :'DAYAL AS SELECT 'X'AS 'DUMMY; – dnoeth