썸네일 [Oracle] ORA-00900: invalid SQL statement 원인, 해결방법 java.sql.SQLSyntaxErrorException:ORA-00900: invalid SQL statement Syntax : 문법 'SQL쪽 문법에 문제 있어 ! 가서 봐봐' 라는 뜻; 역시나 URL쪽에 localhost를 localhos로 입력했다 ^^ 해당 에러가 뜬다면, sql문으로 달려가서 오탈자와 ;를 꼭! 확인하면 된다. 참고블로그 docu94.tistory.com/110 [프로젝트] oracle ORA-00900 에러 이유 및 해결방법 oracle ORA-00900 에러 이유 및 해결방법 oracle ORA-00900 에러가 뜨면서 같이 뜨는 메세지 : ORA-00900 invalid SQL statement 해석하면 SQL 문법이 잘못되었다는데, 이런문제가 자주 발생하는 이유는 오..
썸네일 [Oracle] FINALWORKSHOP (9) 오답 정리 Q.작가 정보 테이블의 모든 등록일자 항목이 누락되어 있는 걸 발견하였다. 누락된 등록일자 값을 각 작가의 '최초 출판도서의 발행일과 동일한 날짜'로 변경시키는 SQL 구문을 작성하시오 (COMMIT 처리할 것) 나의 로직 * TB_WRITER | TB_BOOK_AUTHOR | TB_BOOK을 조인해야한다 * 작가별로 최초 출판일을 파악한다. < 이부분에서 막힘 결과 2292행이 나왔다..ㅎ...ㅋ.... 예를들어, 창비에서 1번 작가가 쓴 모든 책이 조회 되었기 때문인데, GROUP BY절로 WRITER_NM, WRITER_NO, BOOK_NO을 묶었기 때문이다. 더보기 창작과비평사 1 1967051501 창작과비평사 1 1968082501 창작과비평사 1 1971033001 창작과비평사 1 19730..
썸네일 [Oracle] column ambiguously defined / must name this expression with a column alias 춘대학 DML 3번 문제 오류 1 [오류문구] column ambiguosly defined 1. WHERE절의 오타 2. TB_DEPARTMENT과 TB_PROFESSOR 테이블에 DEPARTMENT_NO가 동일하여 이 어떤 컬럼인지 명확하게 명시하라는 오류가 뜬다. 더보기 The solution is quite simple: you will have to expand the projection to explicitly select named columns. Then you can either leave out the duplicate columns, retaining just (say) COACHES.ID or use column aliases: coaches.id as COACHES_ID. 출처 -..
썸네일 [Oracle] FINALWORKSHOP (6) 오답 정리 문제 Q.300권 이상 등록된 도서의 저작 형태 및 등록된 도서 수량을 표시하는 SQL 구문을 작성하시오. (저작 형태가 등록되지 않은 경우는 제외할 것) 내가 기술한 코드 무려 2292행이 나오며, 한 눈에 봐도 망한 코드라는 것을 알 수 있다. 틀린이유 문제를 다시 읽어보면, Q.300권 이상 등록된 도서의 저작 형태 및 등록된 도서 수량을 표시하는 SQL 구문을 작성하시오. (저작 형태가 등록되지 않은 경우는 제외할 것) 문제에서는 300권 이상 등록된 도서의 도서의 저작 형태및 등록된 수량을 요구하지만, 나는모든도서의 저작 형태와 재고수량을 기술했다. 따라서, 도서명이 담긴 TB_BOOK테이블을 JOIN을 할 필요가 없다. 해결방안 저작 형태와 등록된 수량을 기준으로 한, 코드는 다음과 같다. 1..
썸네일 [Oracle] 주민등록번호(CHAR)를 활용하여 학생의 입학 당시의 나이 확인 문제 춘 기술대학교의 재수생 입학자 학번과 이름을 표시하시오.(이때, 19살에 입학하면 재수를 하지 않은 것으로 간주) 내가 생각한 로직 -- 태어난 년도 + 19년 != ENTRANCE_ DATE -- 주민등록번호 앞 두자리 => YY 포맷으로 변경 -- 변경된 포맷 + 19년(==228개월) => 입학한 년도 -- EXTRACT (YEAR FROM ENTRANCE_DATE) => 입학년도를 4자리로 추출 ? -- 주민번호를 가지고 태어난 년도 조회 성공 -> 하지만 모두 3/1로 조회됨 -- 20살이 되었을 해 조회 성공 -> 태어난 년도에서 228개월을 더했을 시점 == 20살이 되었을 해 -- ENTRANC_DATE가 20살이 되었을 해보다 늦을 때 == 재수를 했다 SELECT STUDENT_N..
[Oracle] 비등가 조인을 활용하여 문제 풀기 9. 사번, 사원명, 직급명, 급여등급, 구분을 조회하는데 이때 구분에 해당하는 값은 급여등급이 S1, S2인 경우 '고급' 급여등급이 S3, S4인 경우 '중급' 급여등급이 S5, S6인 경우 '초급' 으로 조회되게 하시오. SELECT EMP_ID, EMP_NAME, DEPT_TITLE,SAL_LEVEL, CASE WHEN SAL_LEVEL IN ('S1','S2') THEN '고급' WHEN SAL_LEVEL IN ('S3','S4') THEN '중급' ELSE '초급' END "급여등급" FROM EMPLOYEE JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID JOIN SAL_GRADE ON ( SALARY BETWEEN MIN_SAL AND MAX_SAL); 문제점 1. D..
썸네일 [Oracle] 두 개이상의 테이블을 외부조인 하는 방법 수업시간 실습문제 5 04_DML(SELECT)_JOIN_KH계정.sql 보너스를 받는 직원들의 사원명, 보너스, 연봉, 부서명, 근무지역명을 조회하시오 SELECT EMP_NAME, BONUS, SALARY, DEPT_TITLE,LOCAL_NAME FROM EMPLOYEE, DEPARTMENT,LOCATION WHERE DEPT_CODE = DEPT_ID AND LOCATION_ID = LOCAL_CODE AND BONUS IS NOT NULL; [결과값] 더보기 선동일 0.3 8000000 총무부 ASIA1 유재식 0.2 3400000 해외영업2부 ASIA3 하이유 0.1 2200000 해외영업1부 ASIA2 심봉선 0.15 3500000 해외영업1부 ASIA2 장쯔위 0.25 2550000 기술지원..
[Oracle] 같은 문제에 DECODE 와 CASE WHEN THEN 적용해보기 직원들의 급여를 인상시켜서 조회 직급코드가 J7인 사원은 급여를 10%로 인상해서 조회 J6인 사원은 급여를 15%로 인상해서 조회 직급코드가 J5인 사원은 급여를 20%로 인상해서 조회 그 외의 직급 사원들은 급여를 5%로 인상해서 조회 DECODE 사용 SELECT EMP_NAME, JOB_CODE, SALARY"기존급여" , DECODE(JOB_CODE, 'J7', SALARY * 1.1 , 'J6', SALARY * 1.15 , 'J5' ,SALARY * 1.2 , SALARY * 1.05 ) "인상된급여" FROM EMPLOYEE; [결과값] 선동일J180000008400000 송종기J260000006300000 노옹철J237000003885000 송은희J428000002940000 유재식J33..
썸네일 [Oracle] 데이터 테이블에서 이메일 전체 조회가 아닌 아이디만 조회하고 싶을 때 EMPLOYEE 테이블에서 EMAIL 조회 시, sun_di@or.kr이 아닌 sun_di ( == 아이디)만 조회하고 싶다. 접근1 SUBSTR 함수를 이용해서 '@'를 찾아 그 이전까지만 추출하고 싶었다. SELECT EMP_NAME,SUBSTR(EMAIL,1,'@')FROM EMPLOYEE; 결과값=> 실패 더보기 ORA-01722: invalid number 01722. 00000 - "invalid number" *Cause: The specified number was invalid. *Action: Specify a valid number. => 이유 SUBSTR 함수의 매개변수 데이터 타입을 보자, SUBSTR(STRING,POSITON[,LENGTH]) 인데, 위의 경우 마지막 매개변수인..
썸네일 [Oracle] WHERE절에서 와일드카드 기술하기 [3/4] 학원에서 제공한 실습문제를 내 마음대로 변형해보았다. 만일, 조건식에서 LIKE '__!_' ESCAPE '!' 이라고 기술한다면, 절대로 조회가 안된다. 위의 경우를 해석하자면, 세번째 글자가 _로 끝나는 이메일을 뜻하는데, 내가 가지고 있는 데이터 값에는 _로 끝나는 이메일은 존재하지 않고, _뒤에 다른 글자도 오기 때문이다. ( ha_ 로 끝나는 이메일은 없고 , ha_iy 컬럼값 중에 '문자'로 "시작"되는 걸 조회 비교대상컬럼명 LIKE '%문자' => 컬럼값 중에 '문자'로 "끝"나는 걸 조회 비교대상컬럼명 LIKE '%문자%' => 컬럼값 중에 '문자'가 "포함"되는 걸 조회 EMAIL LIKE '%ha% 위의 코드도 동일한 결과값을 출력한다. 1) EMAIL LIKE '__!%_..
썸네일 [Oracle] 보너스 포함 연봉 칼럼에 '원'이라는 리터럴 값 제시 원래 문제에서는 "보너스 포함 연봉" 별칭 생성후 결과값을 확인하는 것이다. 데이터상 보너스가 null인 것들도 있기 때문에 결과값도 null이 되는 문제가 발생한다. 따라서 본인은 null값이 아닌 (= 보너스 포함 연봉이 존재하는 값)들을 where절에 넣어 해당하는 값들만 조회하고자한다. SELECT EMP_NAME, SALARY, BONUS, SALARY,FLOOR(((SALARY+BONUS*12)*12)) "보너스 포함 연봉" FROM EMPLOYEE WHERE ((SALARY+BONUS*12)*12) IS NOT NULL ; 결과값에는 이상이 없고, 원하는 결과가 나왔다. 하지만, 더 나아가, 결과값 뒤에 '원'이라는 리터럴 값을 포함하여 결과를 출력하고 싶다는 생각이 들었다. 리터럴 값을 제..