oracle 6

Mybatis - INSERT SELECT에서 ORA-00933 에러

회사에서 업무를 하던 중 쿼리를 만들다 다소 신기한 방식으로 해결하였습니다.insert에서 update로 변경하는 것만으로 에러가 해결되어 공유하려고 합니다. 한줄요약 : INSERT SELECT 구문에서 실행이 안 되는 경우 태그를 insert에서 update로 바꾸어보자 ORA-00933ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다해당 오류는 SQL 구문 작성 오류 시 문법 오류로 인한 것입니다. 오라클에서 필요한 명령어 쉼표, AND 등 명령어가 빠져 있거나 오타가 난 경우 발생할 수 있습니다. Mybatis에서 발견한 오류IDE에서 쿼리로 작성 할 때 실행시 문제가 없었으나 Mybatis에서 쿼리를 동일한 쿼리를 실행할 때  ORA-00933에러가 계속 발생하였습니다. 아래와 같..

컴퓨터/기타 2024.05.29

Oracle (6) - ORA-01427 : 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다

오라클을 사용하다 보면 아래와 같은 오류를 종종 보게 됩니다. ORA-01427 : 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다 해당 오류는 주로 서브쿼리에서 1건을 초과한 레코드가 나올때 발생하는 에러입니다. 예시 데이터 STUDENT_NO (PK) NAME DEPT_NO 20240304 강감찬 100 20240305 이순신 100 20240306 이산 200 20240307 홍길동 300 문제가 있는 쿼리문을 만들어 보겠습니다. SELECT STUDENT_NO, DEPT_NO FROM EXAMPLE_TABLE T1 WHERE STUDENT_NO = ( SELECT STUDENT_NO FROM EXAMPLE_TABLE T2 WHERE DEPT_NO = 100 ) 해당 쿼리에는 문제가 있습니다...

컴퓨터/Oracle 2024.03.07

Oracle (4) - null값을 치환하는 방법 (NVL, NVL2, COALESCE)

오라클을 사용하 다보면 null에 따른 이벤트 처리를 많이 하게 됩니다. 저는 그동안 CASE 문을 이용하여 사용하였으나 간단하게 함수로 처리하는 방법이 있어 소개하려고 합니다. 직관적으로 알 수 있도록 CASE 문을 사용하는 경우 어떤 형식으로 작성할 수 있는지 추가로 작성하겠습니다. 예제 테이블 데이터 GRADE NAME PRICE SCORE 1 강감찬 3000 300 2 홍길동 5000 500 3 황진이 600 4 장영실 700 5 이순신 NVL SELECT NAME , CASE WHEN PRICE IS NULL THEN SCORE ELSE PRICE END AS NVL_EX FROM EX_TABLE / SELECT NAME, NVL(PRICE,SCORE) AS NVL_EX -- PRICE값이 있는..

컴퓨터/Oracle 2023.12.06

Oracle (3) - 순위처리를 해보자 (RANK, DENSE_RANK, ROW_NUMBER)

쿼리를 작업할 때 성적 및 순위 처리할 일들이 있습니다. 해당 데이터를 RANK 함수를 이용하여 순위처리 하는 방법을 정리하려고 합니다. 예시 테이블 STNT_NO GRADE KOREAN MATH ENGLISH TOTAL 2017111 3 100 90 80 270 2018112 2 90 90 90 270 2019113 3 50 50 60 160 2020114 1 60 70 80 210 RANK, DENSE_RANK, ROW_NUMBER SELECT STNT_NO , TOTAL , RANK() OVER (ORDER BY TOTAL DESC) AS RANK , DENSE_RANK() OVER (ORDER BY TOTAL DESC) AS DENSE_RANK , ROW_NUMBER() OVER (ORDER BY..

컴퓨터/Oracle 2023.11.06

Oracle (2) - COMMIT한 데이터를 다시 가져오자 (TIMESTAMP)

Oracle을 다루다 보면 데이터를 잘못 DELETE나 UPDATE 하는 경우가 있습니다. 그런 경우 ROLLBACK을 하면 해결할 수 있습니다. 하지만 COMMIT을 하면 어떻게 될까요? 이미 데이터가 적용되어 일반적인 방법으로는 복구를 못합니다. 하지만 Oracle에는 COMMIT를 하였을 때 임시로 데이터가 저장하게 되어있고, TIMESTAMP를 이용하여 데이터를 복구할수 있습니다. TIMESTAMP 구문은 아래와 같습니다. SELECT [COLUMN / *] -- 칼럼 FROM [table] -- 대상 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '[NUMBER]' [SECOND/MINUTE/HOUR/DAY]); [WHERE] -- [NUMBER]은 되돌릴 기준 초,..

컴퓨터/Oracle 2023.06.06

Oracle (1) - MERGE INTO를 이용하여 간단하게 조건있는 데이터를 다루자

우리가 A라는 데이터를 만들 때 데이터가 있고 없는 경우에 따라 나누는 경우가 있습니다. PL/SQL을 이용하여 프로시저를 만드는 방법도 있지만 MERGE INTO라는 구문을 이용하면 쉽게 만들 수 있습니다. 예제 테이블 CREATE TABLE T1 ( STU_NO VARCHAR2(10) PRIMARY KEY, --학번 STU_NAME VARCHAR2(10) NOT NULL, --이름 SCR NUMBER(5) --점수 ); CREATE TABLE T2 ( STU_NO VARCHAR2(10) PRIMARY KEY, --학번 STU_GRADE VARCHAR2(2) NOT NULL, --학년 STU_GEND VARCHAR2(2), --성별 SCR NUMBER(5) --점수 ); CREATE TABLE T3 (..

컴퓨터/Oracle 2023.05.31