Backend Web/SQL · DB 기초 21

[SQL] ORA-00932 데이터 유형이 일치하지 않습니다

오류 로그가 preparedStatement.setNull(18,1111) 로 계속 났었다.18번째 컬럼이 오류라는데 전혀 그런 것 같지 않았다. 원인을 찾아보자 🚨 오류 원인1111은 java.sql.Types.OTHER에 해당하는 값이지만, Oracle에서 이 타입을 사용하는 칼럼이 아니라면 오류가 납니다.특히, 해당 칼럼이 VARCHAR2, NUMBER, DATE와 같이 일반적인 타입인데 1111을 넣으면 "부적합한 열 유형" 또는 유사한 타입 관련 오류가 발생합니다. ✅ #{param, jdbcType=VARCHAR} 형태로 사용 INSERT INTO users (name, age) VALUES (#{name, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER}) ..

[SQL] ORA-01461: LONG 값은 LONG 열에 삽입할 때만 바인드할 수 있습니다

이 오류는 현업에서 데이터 수정하시는데 자꾸 오류가 난다고 하셔서로그를 보다가 발견한 오류이다.컬럼에 설정된 문자열 사이즈보다 큰 문자열을 넣으려고 하면 나는 오류이다.매우 간단! 🧠 이 오류는 왜 발생할까?이 오류는 주로 VARCHAR2(4000) 타입의 컬럼에 4000바이트가 넘는 문자열을 삽입하려 할 때 발생합니다.Oracle DB에서 VARCHAR2 컬럼은 최대 4000바이트까지만 저장할 수 있기 때문에,그보다 큰 문자열을 넣으려고 하면 다음과 같은 오류가 발생하게 됩니다:ORA-01461: can bind a LONG value only for insert into a LONG column이럴 때는 CLOB(Character Large Object) 타입으로 컬럼을 변경하거나,입력 데이터를 조..

[SQL] ORA-01427 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.

SQL을 다루다 보면 다음과 같은 오류 메시지를 접한 적이 있을 겁니다.ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다이 오류는 서브쿼리(Subquery)를 사용할 때 자주 발생하며, SQL을 작성할 때 한 번쯤은 꼭 겪게 되는 문제 중 하나입니다.✅ 오류 원인SELECT 문 안에 있는 서브쿼리(subquery)가 2개 이상의 행(row)을 반환했는데,그 서브쿼리를 사용하는 위치는 단 하나의 값만 허용하는 곳일 때 발생하는 오류입니다.예시:SELECT nameFROM employeesWHERE dept_id = (SELECT dept_id FROM departments WHERE location = 'Seoul');위 쿼리에서 location = 'Seoul'인 departmen..

[SQL] ORA-00923 FROM 키워드가 필요한 위치에 없습니다.

오라클에서 SQL을 실행할 때는 문법을 아주 엄격하게 검사합니다. 특히 SELECT문을 작성할 때는 "SELECT → 컬럼 리스트 → FROM → 테이블명" 순서를 반드시 지켜야 합니다.그런데 이 순서를 어기거나, 중간에 빠뜨리거나, 이상한 위치에 다른 키워드를 넣으면 오라클은 "FROM 키워드가 필요한데 왜 없지?" 하면서 ORA-00923 오류를 던집니다.조금 더 구체적으로 말하면, 다음과 같은 상황에서 이 에러가 자주 발생합니다.SELECT 다음에 컬럼 리스트를 제대로 작성하지 않고 다른 절(WHERE, ORDER BY 등)이 바로 오는 경우컬럼 이름과 컬럼 이름 사이에 콤마(,)를 빠뜨린 경우잘못된 괄호나 연산자를 사용한 경우 예시로 살펴보기잘못된 예시SELECT name age FROM us..

[SQL] cron(크론)

CRON 크론식은 리눅스와 유닉스 기반 시스템에서 주기적으로 작업을 예약하고 실행하기 위해 사용되는 시간 기반 스케줄링 시스템입니다. 크론(Cron)은 그리스 신화에서 시간을 관리하는 타이탄 중 하나인 크로노스(Kronos)에서 이름을 따온 것입니다. 크론식 정규표현식 Asterisk (*) - 모든 값 표시 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7, 0과 7은 일요일) Comma (,) - 여러 값 지정 예: "1,5,10"은 1, 5, 10을 나타냄 Hyphen (-) - 범위 지정 예: "2-6"은 2부터 6까지를 나타냄 Slash (/) - 간격 지정 예: "*/5"는 5분 간격으로 모든 값에 대해 일치함을 나타냄 숫자 - 특정 값 지정 예: "3"은 3을 나타..

[SQL] 계층형 쿼리

SELECT LEVEL , LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME , CONNECT_BY_ROOT NAME AS ROOT_NAME FROM TEST_TABLE_ONE WHERE LEVEL >= 2 START WITH PP_LEVEL IS NULL CONNECT BY PRIOR P_LEVEL = PP_LEVEL CONNECT_BY_ROOT 최상위 노드 찾기 CONNECT_BY_ROOT NAME AS ROOT_NAME - 최상의 노드의 NAME이 조회 -- 최상의 노드의 NAME 조회 CONNECT_BY_ROOT NAME AS ROOT_NAME LEVEL 조회되는 레벨 -- 4 레벨만 조회 LEVEL = 4 -- 2 이상 레벨만 조회 LEVLE >= 2 LEVEL = 4 - 4..

[SQL] 배치와 프로시저의 차이

배치(batch)와 프로시저(procedure)는 서로 다른 개념입니다. 배치(batch)는 일괄 처리(batch processing)라고도하며, 대량의 데이터를 처리하거나 작업을 자동화하기 위해 여러 개의 작업을 그룹화하여 실행하는 것을 말합니다. 대부분의 경우 배치는 일정한 시간 간격으로 실행되며, 주로 데이터베이스에 대한 대량의 데이터 입력, 업데이트 또는 삭제 작업에 사용됩니다. 프로시저(procedure)는 데이터베이스에서 실행 가능한 하나 이상의 SQL문을 그룹화한 블록이며, 하나의 단위로 실행됩니다. 일반적으로 프로시저는 데이터베이스의 데이터를 처리하고, 응용 프로그램의 로직을 수행하기 위해 사용됩니다. 또한, 프로시저는 일반적으로 다른 SQL문에서 호출되어 실행되며, 호출자가 제공하는 매개..

Cannot delete or update a parent row

Cannot delete or update a parent row: a foreign key constraint fails (`db`.`t_seg`, CONSTRAINT `FK_SEG01` FOREIGN KEY (`RSEQ`) REFERENCES `tt_seg` (`RSEQ`))Query is: DELETE DELETE A, B, C FROM A a INNER JOIN B b ON b.key = a.key INNER JOIN C c ON c.key = a.key WHERE 1 = 1 이런 식으로 여러 테이블을 한번에 DELETE 하는 경우 문제가 발생했다. 해결 방법으로, 1. 삭제 순서 조정 해당 행을 참조하는 FOREIGN KEY를 먼저 삭제 하고 최초의 행을 삭제한다. 2. 외래키 체크 설정을 해제..

반응형