본문 바로가기

데이터베이스/Oracle

(12)
[Oracle] 테이블명으로 Select쿼리문 자동생성 테이블명 가지고 crud쿼리문을 자동으로 생성해주는 툴 같은게 있는지 찾아보다가.. 마땅치않아서 잊혀져가는 oracle stored procedure 사용법 상기시킬겸 select 쿼리문만 자동으로 생성되도록 작성해봤다. 예제는 입력파라미터로 테이블영문명을 받고, 결과로 dbms콘솔에 select쿼리문이 출력된다. create or replace procedure generateSELECT ( pTableName IN ALL_TAB_COMMENTS.TABLE_NAME%TYPE) is -- 로컬변수 선언 allTabColumns ALL_TAB_COLUMNS%rowtype; allColComments ALL_COL_COMMENTS%rowtype; vcnt number; vstr varchar2(500); -..
[오라클] EXISTS 활용 예제 특정 조건을 만족하는 데이터가 있는지 존재유무만 확인하려고 할 때, 보통 COUNT(*)를 통해 건수가 0 초과 인지 확인하는 로직을 생각했다. 의미있는 성능의 차이를 확인하기위해 아래처럼 약 200만건정도의 더미데이터가 있는 테이블로 예제를 진행해보겠다.123/*데이터 확인*/SELECT COUNT(*) CNTFROM BOOK_EX.TBL_BOARD;cs 먼저 count(*)를 이용한 쿼리를 확인해보자1234/*데이터 확인*/SELECT COUNT(*) CNTFROM TBL_BOARDWHERE BNO >= 5cs0.231초 소요됐다. BNO가 5이상인걸 모두 SCAN한다음에 카운트한 결과를 리턴하게된다. 따라서 TBL_BOARD의 건수가 많을수록 성능저하가 발생할 수 있다. EXISTS쿼리를 이용한다면..
오라클 계정생성 관리자계정으로 로그인 후, 계정을 생성하고 권한을 부여하는 순서로 추가 해준다.
Java 코드, Oracle stored procedure의 성능 비교 테스트 상황Apriori 알고리즘을 구현하며 lift를 계산하는 것은, A->B 라는 규칙이 있을 때 '신뢰도(A,B)/ 지지도(B)' 가 1보다 큰 규칙은 살리고 아닌 것들은 삭제하는 것이나, 현재 생성된 규칙들의 대부분이 lift가 1보다 컸다. 따라서 성능결과 차이를 극대화 시키기 위해 1보다 큰 규칙들을 삭제하는 로직으로 테스트를 진행했다. 상황 1. Java 코드상에서 쿼리를 여러번 DB로 날려서 수행해야하는 경우 ( 수행되는 여러개의 쿼리가 트랜잭션 로직 단위 이므로 All or Nothing 으로 처리되어야 한다.) 상황 2.Oracle의 procedure로 트랜잭션 로직 단위의 쿼리를 작성하여, Java 코드상에서는 DB로 해당 stored procedure를 한 번만 호출 하면 되는 경우..
Oracle cursor -커서 : 여러개의 행이 리턴되는 query를 실행하는 경우 명시적인 커서를 이용해주어야 한다. - 기본 구문declarecursor cursor_name is statement -- 커서 선언beginopen cursor_name; -- 커서 열기fetch cursor_name into variable_name; -- 커서로부터 데이터를 읽어와 변수에 저장close cursor_name; -- 커서 닫기end; - 예제 : 커서를 이용하여 지지도 테이블의 모든 내용을 조회하며 freqset와 support를 조회하는 쿼리 코드 프로시저 실행 결과
Oracle Stored Procedure - 프로시저 기본 구문create or replace procedure 프로시저이름is프로시저에서 사용할 로컬변수begin수행 로직end;/ - 프로시저 실행execute 프로시저이름; - tbl_support와 tbl_confidence 테이블에 저장돼있는 지지도와 신뢰도, 규칙을 이용하여apriori알고리즘의 lift(향상도)를 계산하는 Procedure - 프로시저 실행 - 작성한 오라클 저장 프로시저를 스프링-MyBatis 연동한 프로젝트의 mapper.xml 파일에 작성하는 방법.아래와 같이 에 statementType을 CALLABLE로 준다음 CALL 프로시저명() 해주면 된다. - 코드 상세 설명 -- 저장 프로시저를 sql Developer나 웹에서 사용할 때는 미리 이렇게 설정해주어야 ..
게시판 페이징 처리 (oracle DB) 1. 게시판 테이블을 생성한다. 2. 게시판 테이블 tbl_board에 pk_board라는 이름으로 bno를 primary key로 하는 제약조건을 만든다. 3. primary key인 bno의 값에 할당될 sequence 객체를 만들어준다. 4. 게시판 테이블 tbl_board에 첫번째 row 데이터를 삽입한다.이후, 이 삽입된 row를 이용하여 게시판 테이블의 row를 기하급수적으로 삽입한다 5. 이제 페이징 처리를 해주어야 하는데 오라클의 경우는 페이징 처리에 rownum을 활용한다. rownum은 테이블에서 데이터가 출력될 때 붙는 번호라고 이해하면 좋다.rownum은 출력되면서 붙는 번호이기 때문에 어떤 식으로 SQL문이 실행되는지에 따라서 (실행 계획) 붙는 번호가 달라지게 된다. 아래 두가지..
rownum, rowid 1. rownum : where까지를 만족시킨 자료에 붙는 순번 이러한 이유로 ordery by가 추가되면 rownum까지 하나의 record내의 column으로 인식되어 정렬이 일어난다. //select rownum, emp_id, emp_namefrom tempwhere emp_id>0and lev = '수습'and rownum 0and lev = '수습'and rownum 0이고 lev='수습'인 r..