오라클에 제공하는 AVG 함수를 이용하면 컬럼의 평균값을 구할 수 있다. 이 때 함수가 null 값을 처리하는 방법을 잘 알지 못하면 평균값이 제대로 구해지지 않을 수 있다. 테이블 쿼리 COMM 컬럼의 합계는 2200 테이블의 ROW 수는 5개이기 때문에 COMM_A의 결과가 440(2200 ÷ 5)이 나와야 했는데 550(2200 ÷ 4)으로 계산되었다. 컬럼이 null인 경우 집계함수가 처리하지 않기 때문에 null 처리를 해주어야 한다.(NVL 함수 사용법) SELECT AVG(COMM) AS COMM_A FROM EMP WHERE SAL BETWEEN 1200 AND 1600 SELECT AVG(NVL(COMM, 0)) AS COMM_A FROM EMP WHERE SAL BETWEEN 1200 ..
ORA-00913: 값의 수가 너무 많습니다 ORA-00913: too many values INSERT 구문에 삽입될 컬럼의 개수보다 들어가는 데이터의 개수가 더 많은 경우 발생하는 에러이다. 쿼리 INSERT INTO EMP ( EMPNO,ENAME,JOB ) VALUES ( 9999,'TEST','BLOGGER','DUMMY' ) INSERT 구문의 컬럼 개수는 3개지만 VALUES에 값이 4개이기 때문에 값을 삽입할 수 없는 상황이다. 해결 INSERT INTO EMP ( EMPNO,ENAME,JOB ) VALUES ( 9999,'TEST','BLOGGER' ) INSERT 컬럼 개수와 삽입하려는 데이터의 개수를 맞춰주면 해결가능하다.
LISTAGG 예제1 LISTAGG 괄호에 속한 ename 을 쉼표(',') 구분자를 이용해 출력할 것이며 출력할 데이터는 ename으로 정렬되어 출력된다. LISTAGG 함수를 이용한다면 GROUP BY 절은 필수로 지정해주어야한다. SELECT deptno, LISTAGG(ename, ',') within group (order by ename) AS EMPLOYEE FROM emp GROUP BY deptno LISTAGG 예제2 연결연산자를 이용해 각 사원의 월급을 함께 출력할 수 있다. ORDER BY 절에서 월급을 내림차순으로 정렬하게되면 월급이 높은 사람순으로 출력할 수 있다. SELECT deptno , LISTAGG(ename||'('||SAL||')', ',') within group ..
SYS_CONNECT_BY_PATH를 이용하면 CONNECT BY를 통해 가져온 값을 마치 루트노드로 부터 경로를 표시하는 것과 같이 표현한다. (이전 예제 참조) SELECT ename , SYS_CONNECT_BY_PATH(ename, '/') as PATH FROM EMP START WITH ename='KING' CONNECT BY PRIOR empno = mgr; LTRIM을 이용해 앞에 출력되는 '/'를 제거하고 출력할 수 있다. LTRIM(SYS_CONNECT_BY_PATH(ename, '/'), '/') as PATH 이전 예제와 함께 활용하면 노드간의 계층도를 시각적으로 표현 할 수도 있다. RPAD(' ', (level-1)*3) || LTRIM(SYS_CONNECT_BY_PATH(en..
계층형 질의 계층형 질의를 이용해 EMP 테이블에서 사원간의 서열을 출력한다. START WITH와 CONNECT BY 절을 이용하면 LEVEL을 출력할 수 있다. START WITH절은 루트노드를 지정하며 CONNECT BY 절은 부모노드와 자식노드 간의 관계를 지정한다. SELECT rpad(' ', (level-1)*3) || ename as employee , level , sal , job FROM EMP START WITH ename='KING' CONNECT BY PRIOR empno = mgr; CONNECT BY 조건 BLAKE와 이를 부모노드로 가진 사원을 제외하여 노드를 구성한다. CONNECT BY PRIOR empno = mgr AND ename != 'BLAKE'; START W..
쿼리 SELECT A.COLUMN_NAME , A.COMMENTS , B.DATA_TYPE || '(' || B.DATA_LENGTH || ')' AS DATA_TYPE , B.NULLABLE , B.DATA_DEFAULT FROM ALL_COL_COMMENTS A, USER_TAB_COLUMNS B WHERE A.TABLE_NAME = '테이블명' AND A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME ORDER BY B.COLUMN_ID COLUMN_NAME COMMENTS DATA_TYPE NULLABLE DATA_DEFAULT EMPNO 사원번호 VARCHAR2(20) N ('001') EMPNAME 사원이름 VARCHAR2(50) N..
CREATE TABLE ORA-00907 조회 쿼리일 경우 사용된 괄호의 짝이 맞지 않기 때문에 발생하지만, 테이블 생성시 괄호를 사용하지 않았음에도 불구하고 해당오류가 발생한다면 속성 제약을 지정하는 순서가 잘못된 경우 일 수 있다. 아래의 예시에서 DEFAULT 제약 보다 NOT NULL 제약을 먼저 주었을 때 오류가 발생한다. --오류발생 CREATE TABLE EX( COLUMN1 VARCHAR(100) NOT NULL DEFAULT '00' ); --변경 후 정상동작 CREATE TABLE EX( COLUMN1 VARCHAR(100) DEFAULT '00' NOT NULL );
SQL 쿼리 SELECT * FROM v$version; Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production PL/SQL Release 12.2.0.1.0 - Production CORE 12.2.0.1.0 Production TNS for Linux: Version 12.2.0.1.0 - Production NLSRTL Version 12.2.0.1.0 - Production
- Total
- Today
- Yesterday
- 환경설정
- 국비교육
- CS
- HeidiSQL
- 데이터베이스
- 백준
- svn
- 넥사크로
- SQL
- 오류
- C
- 스프링
- CSS
- 스프링부트
- C++
- 오라클
- JVM
- 네트워크
- 개발용어
- JSP
- Thymeleaf
- 프로그래머스
- 이클립스
- Java
- 부트스트랩
- Open API
- 인턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 |
29 | 30 | 31 |