목록데이터베이스 (13)
말랑말랑제리스타일
[ERR0000]ORA-01861: literal does not match format string Oracle DB를 프로그램에서 쓰다 보면 정말 자주 발생하는 Oracle 에러 중 하나입니다. 이 Oracle 에러가 상당히 골치아픈 이유는 토드나 SQL 디벨로퍼에서 쿼리로 실행하면 발생하지 않는데 프로그램에서 프로시저로 호출시 발생하기 때문이죠. 그럼 자세히 Ora-01861 에러의 발생 원인과 처리 방법을 알아보겠습니다. 1. Ora-01861 에러의 발생 원인 텍스트에 나온 것처럼 문자열이 포맷 스트링과 매칭되지 않는 에러입니다. 제가 이 Ora-01861 에러 많이 봤는데 발생 원인의 90프로가 날짜형을 문자열 형과 비교할 때 발생했습니다. Oracle DB에서 날짜 데이터를 Varchar2(..
Oracle DB에서 UNION, UNION ALL, MINUS 등 집합 연산을 하는 경우 "ORA-12704: 문자 집합이 일치하지 않습니다" 라는 에러가 발생할 수 있습니다. 그럼 이 ORA-12704 에러가 왜 발생하는지 알아보겠습니다. ORA-12704 의 발생원인 ORA-12704의 에러 문구에서도 짐작 가능하듯이 집합 연산의 대상이 되는 데이터 타입이 상이한 경우 ORA-12704 에러가 발생합니다. 주로 NVARCHAR2와 VARCHAR2를 집합연산 하는 경우 이 에러를 마주하게 됩니다. VARCHAR2와 NVARCHAR2의 차이 VARCHAR2는 데이터를 ASCII 코드 형태로 저장하고 NVARCHAR2는 UNICODE 형태로 저장합니다. 따라서 NVARCHAR2는 기본적으로 CHAR 단위..
Oracle에서 Start With, Connect By Prior 구문으로 계층형 쿼리를 간단하게 만들 수 있습니다 계층형 쿼리가 뭐냐?? 트리 형태의 구조를 쿼리 즉 Oracle SQL로 나타낸거죠 일단 계층형 쿼리를 사용할 수 있는 간단한 테이블을 만들어줍니다 이런 형태의 테이블을 만들거고 Material에는 자신의 이름, Parent_mat에는 부모 노드 즉 상위 명칭이 들어갑니다 CREATE TABLE TREE_TAB_TMP ( MATERIAL VARCHAR2(10) PRIMARY KEY, PARENT_MAT VARCHAR2(10) ); INSERT INTO TREE_TAB_TMP VALUES ('M1',NULL); INSERT INTO TREE_TAB_TMP VALUES ('M2','M1');..
네 Char 타입을 전부 Byte로 바꾸라는 업무를 받았네요 일단 Oracle의 Varchar2 자료형은 Char 단위와 Byte 단위로 쓸 수 있죠 근데 이걸 다 Byte로 통일을 시키라네요 뭔 통일을 이렇게 좋아하는지...그냥 통일부에서 이런거 해주면 안되냐는 헛소리와 함께 일단 찾아봅시다 SELECT * FROM DBA_TAB_COLUMNS WHERE OWNER = '유저명' AND CHAR_USED 'B' DBA_TAB_COLUMNS라는 ORACLE DBA 테이블에서 OWNER에 DB 유저명을 넣고 조회를 할텐데 CHAR_USED가 B이면 BYTE 단위, C이면 CHAR 단위입니다 우왕...더럽게 많네여ㅠㅠ 어느 세월에 다하지...일하러 갑니다ㅠㅠ
Oracle 테이블을 정리하다보면 Row 수 또는 사이즈로 정렬해서 테이블 정리의 우선순위를 뽑아볼 수 있을 것 같은데요 일일이 Count(*)로 테이블 Row 수를 조회하면 속도가 느리고 한참 기다려야 하죠 그런 상황 대신 한번에 전체 테이블을 Row 수로 정렬해서 뽑아볼 수 있는 쿼리 전달합니다 SELECT TABLE_NAME,NUM_ROWS FROM USER_TABLES ORDER BY NUM_ROWS DESC; 이건데요 이렇게 조회하면 해당 유저의 전체 테이블과 Row 수를 뽑아볼 수 있습니다 그럼 Row 수가 많다고 단순히 큰 테이블일까요? 아니죠 Column 수도 생각해야되고 확장 관련된 요소도 테이블 사이즈에 영향을 미치는데요 그런 상황을 다 고려해서 실제 테이블의 크기 순으로 뽑아볼 수 있..
DCL 구문 즉 , Data Control Language 중 가장 대표적인 Oracle 구문이 바로 Grant, Revoke로 권하는 주거나 빼는 구문인데요 특정 직무 담당자가 아닌 이상 자주 쓰는건 또 아니다보니 헷갈리죠 근데 또 막상 써보면 Grant 구문으로 Oracle 테이블 권한 주는건 간단합니다 GRANT 권한 ON 테이블명 TO 유저명 으로 유저에게 테이블 권한을 부여할 수 있는데요 여기서 권한에는 SELECT,DELETE 등 권한을 줄 구문이 들어가고 테이블 명과 유저명은 말안해도 알겠죠 GRANT SELECT,DELETE,INSERT,UPDATE ON TAB1 TO USER1 좀 더 바로 쓸 수 있는 예시 Oracle SQL로 표현하면 위와 같겠죠 SQL 실행시키거나 Oracle 프로시..
가끔 SQL문을 쓰다가 새로운 기능을 사용하는 경우가 적지않아 있는데요 특히 Oracle 12 버전에서만 지원하거나 그런 경우에 버전을 확인하게 되죠 이런 경우 간단하게 Oracle 버전을 쿼리로 조회 가능합니다 SELECT * FROM V$VERSION; 이게 바로 Oracle 버전 조회하는 쿼리입니다
요즘 회사에서 테스트 DB와 운영 DB간 사이즈를 마이그레이션 하면서 유용하게 쓰고있는 오라클 테이블의 Column Size 변경 쿼리입니다 ALTER 테이블 구문이 자주 쓰는게 아니다 보니까 한번씩 찾아보게 되는데요 다음에 또 테이블 Column Size 변경할일 있을때 찾아볼려고 제가 쓰려고 올리는 가장 간단한 쿼리문입니다 ALTER TABLE 테이블 명 MODIFY (컬럼명 컬럼타입(사이즈)); 이렇게 사용 가능하고 예시로는 ALTER TABLE TABLE1 MODIFY (COL1 VARCHAR2(5)); 이렇게 되겠죠 테이블 Column의 Size를 바꾸고 나서는 가능하면 테이블 연관된 Index도 다시한번 체크해보시길 권장합니다