본문 바로가기

DB

[oracle] REGEXP_LIKE 의 byte 제한 오라클의 REGEXP_LIKE( string, pattern ) 구문을 잘 사용하고 있었는데 결과값이 하나도 나오지 않는 문제가 있었습니다. 찾아보니 정규식이 사용되는 패턴부는 512byte 의 제한을 갖고 있습니다. 제 패턴부는 다음과 같이 | 를 사용하고 있었습니다. SELECT 123 FROM DUAL WHERE REGEXP_LIKE('STR1', 'STR1|STR2|STR3') 번거롭지만 IN 절로 변경해야겠다고 생각해서 다음과 같이 변경해봤습니다. 오라클에서 ' 를 escape 하려면 '' 를 쓰더라구요. SELECT 123 FROM DUAL WHERE 'STR1' IN (REPLACE('''STR1|STR2|..
[oracle] NULL의 연산 산술연산시 무조건 NULL이 됩니다. 쉽게 말해 NULL과 함께 가로로 연산하는건 모두 NULL이 됩니다. 그룹함수 연산시 NULL은 연산대상에서 제외됩니다. 다만 COUNT(*) 은 로우 수 자체를 카운트하므로 값이 NULL만 존재해도 예외입니다. 그룹합수 연산시 대상이 모두 제외되면 0이 아닌 NULL을 리턴합니다. 문자연결 연산시 NULL은 공백이나 NULL 로 표현되지 않으며, NULL 자체를 건너뜁니다. 즉 NULL || 'ABC' = ABC가 됩니다. 오라클에서 NULL은 = NULL 혹은 NULL 과 같은 연산자로는 검색할 수 없으며, IS NULL 혹은 IS NOT NULL을 사용해야만 합니다.
[oracle] 합계함수 없는 pivot 단순 문자열만 존재하는 테이블에서 피벗을 사용해야 할 때가 있는데 합계함수를 쓰지 않으면 ORA-56902 에러가 뜹니다. 문자열에도 MIN 또는 MAX 함수가 먹히는 것을 이용합니다. SQL SELECT ACCOUNTING, RESEARCH, SALES, OPERATIONS FROM ( SELECT DNAME, LOC FROM DEPT ) PIVOT ( MAX(LOC) FOR DNAME IN ('ACCOUNTING' AS ACCOUNTING, 'RESEARCH' AS RESEARCH, 'SALES' AS SALES, 'OPERATIONS' AS OPERATIONS) ); 결과
[oracle] 정규식을 사용하는 REGEXP 함수 오라클 10g 이상에서 추가된 정규식 관련 함수를 텍스트 리터럴, 바인딩 변수, 문자 데이터를 포함하는 열에서 사용할 수 있습니다. ( LONG 타입을 제외한 CHAR, NCHAR, CLOB, NCLOB, NVARCHAR2, VARCHAR2 ) 정규식 함수 및 조건 REGEXP_LIKE 단순한 LIKE 를 넘어 정규식 일치를 수행하는 데 사용됩니다. boolean을 반환합니다. 문법 REGEXP_LIKE ( string, pattern [, matching parameter ] ) REGEXP_LIKE ( 해당 문자열, 정규식 패턴 [, 매칭 매개변수] ) string 문자열 검색될 문자열입니다. pattern 정규식 패턴 비교할 정규식 패턴을 나타내는 리터럴 문자열입니다. matching paramet..
[oracle] total with pivot DATA 직급에 따른 부서별 급여합 CUBE 사용 SELECT * FROM ( SELECT NVL(DEPTNO, -1) DEPTNO, JOB, SUM(SAL) SAL FROM EMP GROUP BY CUBE(DEPTNO, JOB) ) PIVOT( SUM(SAL) FOR DEPTNO IN (10,20,30,-1 AS TOTAL) ) ORDER BY JOB; SUM OVER 사용 SELECT * FROM ( SELECT DEPTNO, JOB, SAL, SUM(SAL) OVER(PARTITION BY JOB) AS TOTAL FROM EMP ) PIVOT ( SUM(SAL) FOR DEPTNO IN (10, 20, 30) ) ORDER BY JOB; 결과와 실행계획이 모두 일치한다.
Mysql root 비밀번호 재설정 Mysql root 비밀번호 재설정root 패스워드를 잊은 경우 재설정하기. Windowsmysql 서비스를 종료한 뒤 관리자 권한으로 커맨드라인을 실행해 다음을 입력한다. 비밀번호 없이 mysql에 접속된다.C:\> cd C:\Program Files\MySQL\MySQL Server 5.7\binC:\> start mysqld.exe --skip-grant-tablesC:\> mysqlColored by Color Scriptercs 패스워드를 변경한다.UPDATE mysql.user SET password=password('패스워드') WHERE user='root';FLUSH PRIVILEGES;Colored by Color Scriptercs Mysql 5.7 버전 이상에선 컬럼명이 바뀌었다. ..