Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다 ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다 ] with root cause oracle.jdbc.OracleDatabaseException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다 MyBatis에서 쿼리문 작성 시, 쿼리문 마지막에 세미콜론(;)을 붙이면 위와 같은 오류가 발생한다. 에러 파일 경로는 쿼리문에 담겨있는 .xml 파일 경로로 뜰 것이다. 쿼리문을 아래와 같이 작성하였기 때문에..
PL/SQL Oracle's Procedural Language extension to SQL의 약자로, SQL 문장에서 변수 정의, 조건 처리(IF), 반복 처리(LOOP, WHILE, FOR) 등을 지원한다. 오라클 자체에 내장된 Procedure Language이다. PL/SQL 자신이 컴파일 엔진을 가지고 있으며 PL/SQL의 모든 요소는 하나 또는 두 개 이상의 블록으로 구성하여 모듈화가 가능하다. PL/SQL 문은 블록 구조로 되어 있어 다수의 SQL 문을 한 번에 Oracle DB로 보내어 수행 속도를 향상할 수 있다. 하지만 Procedure를 잘못 작성하게 되면 수행 속도를 저하시킬 수도 한다. 큰 블록(BEGIN~END) 안에 소블록(BEGIN~END)이 여러 개 들어갈 수 있다. 테이..
LAG() 함수를 이용하여 증감 표현하기 간단한 증감 표현을 예시로 들 거라서 데이터 삽입은 하지 않고, inline view를 사용하였다. 우선 데이터를 살펴보면 다음과 같다. 1일부터 5일까지 총 5일간의 주문수(ord_cnt)를 표현하였다. 이전 날짜와 비교하여 증감을 나타내고, 주문수 순위와 누적 주문수를 출력한다. 조건 이전 날짜와 현재 날짜의 주문수가 동일한 값(또는 이전 날짜의 데이터가 없음) 일 때 증감 부분은 - 로 나타낸다. 이전 날짜보다 현재 날짜의 주문수가 적은 경우 ▼로 표현하고, 이전 날짜보다 현재 날짜의 주문수가 많은 경우에는 ▲로 표현한다. 주문수 순위 부분에서 주문수가 동일한 경우 동일 순위로 표시하고, 다음 순위는 중복 순위와 상관없이 그대로 이어진다. 코드 WITH or..
제약 조건(Constraint) Oracle에서는 제약 조건을 사용하여 유효하지 않은 Data가 입력되는 것을 방지한다. 제약 조건은 Table 생성 시 또는 생성 후에 정의한다. Column 또는 Table 레벨 별로 제약 조건을 적용하고, 종속된 Table의 삭제를 방지한다. 제약 조건 이름을 지정할 수 있는데, 지정하지 않은 경우 SYS_Cn 형식의 이름을 생성한다. USER_CONSTRAINTS View에서 부여된 제약 조건을 확인할 수 있다. USER_CONS_COLUMNS View에서 제약 조건과 연관된 Column을 확인할 수 있다. 유형 NOT NULL : 칼럼에 Null 값을 포함하지 않도록 지정한다. UNIQUE : Table의 모든 행에 대해 고유한 값을 갖는 칼럼 또는 칼럼의 조합을..
DDL(Data Definition Language) CREATE CREATE [GLOBAL TEMPORARY] TABLE [schema.]table (colunm datatype [DEFAULT expr][, ...,]); Table을 생성한다. GLOBAL TEMPORARY : 임시 Table을 생성하고, 모든 Session에서 볼 수 있다. (입력된 Data는 해당 Session에서만 확인 가능) schema : 소유자 이름과 동일하다. table, column : table 이름, column 이름 DEFAULT expr : INSERT 문에서 값을 생략했을 때 해당 Column에 사용될 기본 값 datatype : Column Data Type 및 길이 DEFAULT 옵션 데이터 insert 시..
트랜잭션(Transaction) 논리 작업 단위를 형성하는 모음을 Transaction이라 한다. 트랜잭션은 Data를 일관성 있게 변경하는 DML(Data Manipulation Language) 문, 하나의 DDL(Data Definition Language) 문, 하나의 DCL(Data Control Language) 문 중 하나로 구성된다. 트랜잭션은 실행 가능한 첫 번째 SQL문이 실행되면 시작된다. COMMIT 또는 ROLLBACK 실행 시 종료되고, DDL 또는 DCL 문 실행 시 자동으로 Commit 되므로 이때도 종료된다. 또한 사용자 종료 또는 시스템에 의한 비정상적인 종료 시에도 종료된다. 특징 원자성(Atomicity) : Data 처리의 최소 단위 일관성(Consistency) :..
Data 조작어(DML, Data Manipulation Language) 테이블에 새 행을 추가 하거나, 기존 행 수정 또는 기존 행 삭제 등의 논리 작업 단위를 형성하는 DML문 모음을 트랜잭션(Transaction)이라 한다. SELECT SELECT문은 데이터베이스에서 정보를 검색한다. SELECT [DISTINCT] { *, column [alias], ... } FROM table [WHERE condition]; SELECT 절은 표시할 컬럼을칼럼을 지정하고, FROM 절은 SELECT 절에 나열된 칼럼을 포함하는 테이블을 지정한다. SELECT : 하나 이상의 컬럼으로 구성되는 목록 DISTINCT : 명시하는 경우 중복되는 칼럼을 생략 * : 모든 컬럼 선택 column : 명명된 칼럼을..
관계형 데이터베이스 관리 시스템(RDBMS) 관계 또는 2차원 테이블을 사용하여 정보를 저장하는 데이터베이스 관계형 데이터베이스는 하나 이상의 테이블을 포함할 수 있고, 테이블은 기본 저장 구조로서 현실에 필요한 데이터를 보유할 수 있다. 테이블에 대한 액세스 경로를 지정하지 않으면 데이터가 물리적으로 배열되어 있는 방식을 알 필요가 없다. 데이터베이스에 액세스 하기 위해 SQL(ANSI 표준어) 문을 실행하고, SQL을 사용하여 데이터베이스 수정이 가능하다. 관계 분할과 결합을 위한 연산자 집합이 포함된다. 구성 요소 Data를 저장하는 객체(Entity) 또는 관계(Relation)의 모음이다. 다른 관계 생성을 위해 관계에 적용하는 연산자(Operators)의 집합이다. 정확성과 일관성을 위한 Da..
공식 문서 참조 https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html PreparedStatement (Java Platform SE 7 ) Sets the designated parameter to SQL NULL. This version of the method setNull should be used for user-defined types and REF type parameters. Examples of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and named array types. Note: To be portable, docs.oracle.com 데이..
벌써 JDK 17 버전까지 나왔네요.. Open JDK (+ 추가) 오라클 JDK 는 로그인이 필요하기 때문에 open jdk를 다운로드 받아도 됩니다. Java Platform, Standard Edition 11 Reference Implementations Java Platform, Standard Edition 11 Reference Implementations Java Platform, Standard Edition 11 Reference Implementations The official Reference Implementation for Java SE 11 (JSR 384) is based solely upon open-source code available from the JDK 11 Pr..
SQLD 자격증 준비를 위해 Live SQL을 사용하기로 하였다. Live SQL 🔨 실행 방법 https://livesql.oracle.com Oracle Live SQL 876,266 scripts, 3,965 likes, 1,035 public scripts, 6,209 new scripts created in the last 7 days. livesql.oracle.com Live SQL 웹 사이트를 이용하기 위해선 Oracle 계정이 필요하므로 계정이 없다면 회원가입을 해주어야 한다. 로그인을 하지 않은 상태에서Start Coding Now를 누르면 로그인 화면이 바로 뜬다. 로그인 하게 되면 아래와 같은 화면이 나오게 된다. I Agree에 체크를 해주고 Accept를 눌러 다음으로 넘어가준다..