티스토리

데브포유
검색하기

블로그 홈

데브포유

dev4u.tistory.com/m

Creative Thinking! moonsun4ux@gmail.com

구독자
2
방명록 방문하기

주요 글 목록

  • [오라클] sqldeveloper로 clob 데이터 넣는 방법 create table tt_shop(shop_id varchar2(10),shop_info clob);-- & 대체변수롤 인식하지 않게 하기set define off;declarev_b clob;begin v_b := q'[테스트; url=test.com?&shop=111]'; insert into tt_shop values('0001', v_b); commit;end;select * from tt_shop; 공감수 0 댓글수 0 2025. 2. 28.
  • M4 맥미니에 도커로 Oracle 19c 띄우기 https://gist.github.com/rutcreate/7737ba721cd7058f75eb312a080bc446 Setup Oracle Database on Apple Silicon Chip (Docker)Setup Oracle Database on Apple Silicon Chip (Docker) - README.mdgist.github.com 위 주소에 있는 방법으로 한번에 성공했습니다.Apple Silicon으로 작성된 설치 방법이지만, x86에 linux도 데이터베이스 zip 파일만 변경해 주면 잘 동작합니다.혹시라도 x86 linux에서 도커 빌드는 되었으나, run 할때 에러가 발생한다면 데이터가 저장될 oradata 디렉토리(하위 포함)에 퍼미션을 변경해 주면 됩니다.  계정 및 테이.. 공감수 0 댓글수 0 2025. 2. 20.
  • 현재 세션에 적용된 옵티마이저 환경 정보를 조회하기 위한 쿼리 SELECT     SID,     SERIAL#,     OPTIMIZER_MODE,     OPTIMIZER_INDEX_COST_ADJ,     OPTIMIZER_INDEX_CACHING,    OPTIMIZER_FEATURES_ENABLE,    OPTIMIZER_DYNAMIC_SAMPLING,    OPTIMIZER_PARAMETERFROM     V$SESSION_OPTIMIZER_ENVWHERE     SID = SYS_CONTEXT('USERENV', 'SID'); 공감수 0 댓글수 0 2024. 7. 29.
  • [PL/SQL] Key:Value 오브젝트 사용하기 (Assocative Array) PL/SQL에서 제공하고 있는 컬렉션 타입 중에서 연관 배열 (Associative Array)를 사용하면 Hash Table과 같이 사용할 수 있습니다. Key (인덱스)로 사용할 수 있는 데이터 타입은 숫자/문자열 모두 가능합니다.   01. Key:Value Type 정의TYPE KeyValueType IS TABLE OF NUMBER(12) INDEX BY VARCHAR2(3);v_keyVal KeyValueType;v_key VARCHAR2(3); 02. Value 저장 ( 저장할 때는 키 값이 존재하는지 체크함)IF v_keyVal.EXISTS('001') THEN v_keyVal ('001') := v_keyVal ('001') + 1000;ELSE v_keyVal ('.. 공감수 0 댓글수 0 2024. 6. 13.
  • [오라클] LAST_VALUE() 함수 사용시 주의할 점 오라클 문서에 나와 있는 바와 같이 LAST_VALUE() 함수 사용시에 ORDER BY 절을 추가 하더라도windowing 절이 없으면 의도하지 않는 값이 나오는 경우가 있습니다.따라서, LAST_VALUE() 사용시에는 위의 예시와 같이 windowing 절을 추가해 줘야 원하는 값을 얻을 수 있습니다. 공감수 0 댓글수 0 2023. 11. 21.
  • (Oracle) LISTAGG 함수 사용법 (with Partition By) The LISTAGG syntax is: LISTAGG ( measure_expr [, delimiter]) WITHIN GROUP (order_by_clause) [OVER query_partition_clause] LISTAGG Parameters There are several mandatory and optional parameters in the LISTAGG function. The parameters of the LISTAGG function are: measure_expr (mandatory): This is the column (or expression) that you wish to concatenate the values of. In the example above, I used la.. 공감수 0 댓글수 0 2023. 2. 14.
  • [오라클] CLOB 컬럼 값 replace 하는 법 오라클에서는 VARCHAR2 타입으로 최대 4000 byte 까지만 저장할 수 있습니다. 4000 byte가 넘는 문자열을 저장하기 위해서는 CLOB 타입으로 컬럼을 생성해야 하죠. 4000 byte가 넘는 데이터에서 특정 문자열을 찾아 치환(replace)하고 싶을 때 어떻게 해야 할까요? 저장된 값이 4000 byte 이하라면 아래와 같이 replace() 함수를 사용할 수도 있습니다. EX) BIG_TEXT 컬럼에서 '대한민국' 문자열을 찾아 'KOREA'로 변경 SELECT TO_CLOB(REPLACE(TO_CHAR(BIG_TEXT), '대한민국','KOREA')) FROM T_TABLE 저장된 값이 4000 byte가 넘는다면, 정규 표현식 함수 'REGEXP_REPLACE()'를 사용하면 됩니.. 공감수 3 댓글수 0 2022. 7. 7.
  • "Oracle 11g Enterprise" DBMS 테스트 환경 구축해 보기 오라클을 공부하기 위해서 Oracle 11g Enterprise를 설치하는 것은 매우 번거로운 작업입니다. 이를 해결하는 방법은 도커 환경을 이용하는 것입니다. 아래 순서대로 따라 하시면 몇 분 만에 환경을 구축할 수 있습니다. 1. 도커 이미지를 다운로드 받습니다. docker pull loliconneko/oracle-ee-11g 2. 다운로드 받은 이미지를 이용해 컨테이너를 실행합니다. mkdir /home/user/data docker run -d -p 8080:8080 -p 1521:1521 -v /home/user/data:/u01/app/oracle -e DBCA_TOTAL_MEMORY=2048 loliconneko/oracle-ee-11g docker container ls -a 3. 접속.. 공감수 0 댓글수 0 2022. 6. 25.
  • PL/SQL Developer (feat. 정품 소프트웨어 사용합시다) 저는 Oracle Query Tool로 Orange를 제일 좋아합니다. 단점은 윈도즈 버전만 있다는 것이죠. 물론 Toad, SQL Gate도 좋은 툴입니다. Orange / Toad가 상대적으로 가격이 비싸기 때문에 SQL Gate를 회사에서 많이 사용을 했습니다. 올해 이직을 했는데, 비용 때문인지 DBA를 제외하고는 대부분 SQL Developer (무료)를 사용하고 있었습니다. SQL Developer도 나름 좋지만, 윈도즈에서만 사용할 경우에는 살짝 아쉬운 부분이 많이 있습니다. 그런데 특정 부서에서는 유료로 "PL/SQL Develper 를 구매해서 사용하고 있었습니다. 처음 들어본 툴인데, 이름부터가 PL/SQL 코딩에 특화된 것처럼 보이죠. 가장 큰 매력이 가격인 것 같았습니다. 50 Us.. 공감수 0 댓글수 0 2022. 5. 29.
  • [오라클] WM_CONCAT( ) 함수 관련 SQL 튜닝 회사에서 특정 쿼리 수행시간이 오래 걸려서 튜닝 요청을 받았습니다. 처음 보는 쿼리라서 먼저 실행계획을 봤는데, 특이 사항이 없어서 쿼리에서 처리하는 데이터를 본 후에 문제점을 발견할 수 있었습니다. 오라클 11g 였는데, 쿼리의 SELECT LIST 부분에 WM_CONCAT 함수가 수행 시간을 오래 걸리게 만들었습니다. 저는 평소에 "행 -> 열"로 만들어야 하는 경우에는 주로 "LISTAGG" 함수를 사용합니다. WM_CONCAT은 사용하기는 편하나, 오라클 매뉴얼에도 없는 비공식 함수기 때문에 가급적 사용을 안합니다. WM_CONCAT이 문제가 되었던 거는 처리해야 하는 행(값)이 너무 많아서 였습니다. 조회 조건을 변경 하면은 대부분 10개 내외로 WM_CONCAT() 함수가 사용이 되어졌는데, .. 공감수 0 댓글수 0 2022. 4. 6.
  • [오라클] PL SQL에 DB LINK가 있는 경우 유의점 오라클 PL SQL 패키지 내에 DB LINK가 있을 때 유의할 점(?) 혹은 알아두면 좋을 점을 공유하려고 합니다.특정 테이블을 조회하고 있고, 또한 DB LINK로 원격지 테이블도 조회하는 PL SQL이 있습니다.이때 로컬에 있는 테이블에 컬럼을 추가하는 DDL를 수행하면 PL SQL 패키지 또는 프로시저(펑션)의 상태가INVALID가 됩니다.그 이후에 PL SQL를 호출하면 DB LINK가 있을 경우와 없는 경우가 다르게 처리 됩니다.1. DB LINK가 존재하는 경우: 호출시 해당 PL SQL이 DDL로 수행이 되면서 컴파일도 되고 VALID 상태로 변경된 후에 호출이 됨 2. DB LINK가 없는 경우: 호출시 해당 PL SQL이 DDL로 수행되는게 아니라 컴파일 후에 VALID 상태로 됨. 예.. 공감수 0 댓글수 0 2018. 2. 6.
  • [오라클] PRIMARY KEY 삭제시 유의할 점 (유니크 제약조건 포함) 아래와 같이 구문을 사용할 때 주의할 점이 있습니다. ALTER TABLE 테이블명 DROP PRIMARY KEY; 또는 ALTER TABLE 테이블명 DROP CONSTRAINT 유니크제약조건명; 그것은 Primary key를 생성하는 방법에 따라 제약조건과 인덱스가 모두 삭제가 될 때도 있고, 또는 제약조건만 삭제가 되고 인덱스는 그대로 남아 있는 경우가 발생한다는 것입니다. Primary Key를 생성하는 방법에 따른 현상인데요. Primary Key를 생성할 때 인덱스와 제약조건을 동시에 생성하면 삭제할 때도 동시에 삭제가 되고 이미 생성된 인덱스를 사용해서 Primary Key를 생성하면, 위 구문 수행 시 제약조건만 삭제가 되고 인덱스는 남아 있게 됩니다. 문제는 이미 생성된 Primary K.. 공감수 15 댓글수 2 2017. 11. 9.
  • [오라클] 가상컬럼(virtual column) 활용하기 > 가상컬럼이 있는 테이블 생성CREATE TABLE TB_ORDERS (ORDER_NO VARCHAR2(10),PRICE NUMBER,QTY NUMBER,TOTAL_VALUE AS (PRICE * QTY) VIRTUAL); > 데이터 입력INSERT INTO TB_ORDERS (ORDER_NO, PRICE, QTY) VALUES('1709010001', 5000, 5);COMMIT; 데이터를 조회하면 TOTAL_VALUE에 25000 이 들어가 있는게 보인다.정확히 말하면 가상컬럼이기 때문에 PRICE * QTY 의 수식에 의해서 보여지는 값이라고 보면 된다. 당연하지만 가상컬럼이기 때문에 업데이트는 안된다. - EOF - 공감수 0 댓글수 0 2017. 9. 13.
  • [오라클] 파티션키 값을 조회 조건으로 사용할때 주의할 점 오라클에서 파티션키 값을 검색 조건으로 사용할 경우 주의할 점 1가지를 소개해 드립니다. 피티션 테이블명: T_ORDERS피티션 키: ORDER_DT인덱스: CUST_NO (고객번호) 위와 같은 상황에서 'AAA' 고객을 거래내역을 조회하는 경우에 ORDER_DT에 조건에 논리적 오류가 있을 경우에 문제가 생깁니다. SELECT *FROM T_ORDERSWHERE CUST_NO = 'AAA' AND ORDER_DT BETWEEN '20170101' AND '20170102';>> 정상적으로 고객번호 인덱스를 Access하는 실행계획이 수립됨. SELECT *FROM T_ORDERSWHERE CUST_NO = 'AAA' AND ORDER_DT BETWEEN '20170101' AND '20171231';>.. 공감수 0 댓글수 0 2017. 4. 5.
  • [오라클] Logon Trigger 예제 CREATE OR REPLACE TRIGGER USER_TRACE_TRG AFTER LOGON ON DATABASE BEGIN IF USER = '&USER_ID' THEN execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; END IF; EXCEPTION WHEN OTHERS THEN NULL; END; / CREATE OR REPLACE TRIGGER USER_TRACE_TRG AFTER LOGON ON DATABASE WHEN(USER = '&USER_ID')BEGIN execute immediate 'alter session set events ''10046 trace name con.. 공감수 0 댓글수 0 2017. 2. 15.
  • [오라클] 현재 세션의 접속 스키마 변경하기 오라클에서 현재 세션의 접속 스키마를 변경하는 방법은 ALTER SESSION를 이용하면 됩니다. ALTER SESSION SET CURRENT_SCHEMA = 스키마명; 공감수 2 댓글수 0 2017. 2. 15.
  • [오라클] 정렬시 NULL값 처리 ORDER BY 구문으로 정렬할때 NULL값을 선두에 오게할지 마지막에 오게할지 정하는 방법은 NULLS FIRST, NULLS LAST 구문입니다. 예제를 보시죠. SELECT EMP_NAME, EMP_NO FROM T_EMP ORDER BY EMP_NAME ASC NULLS FIRST ,EMP_NO DESC NULLS LAST 공감수 1 댓글수 0 2017. 1. 24.
  • [오라클] 두 문자열 유사도 백분율로 구하는 방법 SELECT UTL_MATCH.EDIT_DISTANCE_SIMILARITY('1111 2222', '2222') AS EDS ,UTL_MATCH.JARO_WINKLER_SIMILARITY('1111 2222', '2222') AS JWSFROM DUAL; eds jws45 40 결과는 45%, 40% ~~~ 두 비교 문자열이 100%일치하면 100이 리턴됨. UTL_MATCH.EDIT_DISTANCE_SIMILARITY 는 "Levenshtein Distance" 이고UTL_MATCH.JARO_WINKLER_SIMILARITY 는 "Jaro-Winkler Algorithm"를 사용한다고 함. 참고https://oracle-base.com/articles/11g/utl_match-string-matchin.. 공감수 0 댓글수 0 2017. 1. 11.
  • [오라클] 읽기 전용 테이블 만들기 11g 부터 읽기 전용 테이블을 만들 수 있습니다. 구문ALTER TABLE table_name READ ONLY;ALTER TABLE table_name READ WRITE; 예제CREATE TABLE ro_tab ( id NUMBER); INSERT INTO ro_tab VALUES (1);ALTER TABLE ro_tab READ ONLY; 업데이트하면 ORA-12081 error 발생 공감수 0 댓글수 0 2017. 1. 10.
  • [오라클] Recursive Subquery Factoring 서브쿼링 팩토링 즉 WITH절로 Recursive(재귀호출)를 구현할 수 있습니다.이름하여 Recursive Subquery Factoring 입니다.예제는 아래와 같습니다.-----------------------------------------------------------------------------------------------------WITH t1(id, parent_id, lvl, root_id, path) AS ( -- Anchor member. SELECT id, parent_id, 1 AS lvl, id AS root_id, TO_CHAR(id) AS path FROM tab1 WHERE id = 1 UNION ALL -- Recursive member. SELECT t2.id,.. 공감수 0 댓글수 0 2017. 1. 10.
  • [오라클] 인덱스 힌트 사용하는 방법 두가지 옵티마이저 힌트 중에 특정 인덱스를 사용하라고 알려주는 두가지 방법입니다. 첫번째 방법. INDEX(테이블명 인텍스명) -- 테이블명은 별칭으로 대체할 수 있습니다. : 인덱스명을 기술하는 방법 두번째 방법. INDEX(테이블명(컬럼명1 컬럼명2)) : 인덱스를 구성하는 컬럼명을 기술하는 방법 주로 첫번째 방법을 많이 사용하는데 두번쩨 방법은 인덱스명과 상관없이 사용할 수 있기 때문에 어쩌면 더 좋을 수도 있을 것 같습니다. 공감수 0 댓글수 0 2016. 12. 27.
  • [오라클] 바인드변수 처리가 되지 않은 리터럴 SQL 쉽게 찾는 방법 V$SQL에서 SQL_TEXT 앞부분이 같은 걸로 GROUP BY 해서 사용해도 되지만 PLAN_HASH_VALE 값을이용하는 방법을 소개해 드립니다.PLAN_HASH_VALUE값이 같은데 라이브러리캐시에 많이 존재 한다면 바인드변수 처리가 되지 않은 리터럴SQL일 가능성이 높습니다. SELECT PARSING_SCHEMA_NAME, PLAN_HASH_VALUE, COUNT(*) AS CNTFROM V$SQLGROUP BY PARSING_SCHEMA_NAME, PLAN_HASH_VALUEORDER BY COUNT(*) DESC; CNT가 많은 것부터 PLAN_HASH_VALUE 값으로 조회하면 쉽게 리터럴 SQL를 찾을 수 있습니다. 공감수 0 댓글수 0 2016. 12. 26.
  • [오라클] Hash Join 주의할 점 오라클에서 대용량데이터 처리시에 사용되는 Hash Join시 주의할 점 1가지를 소개해 드립니다. 두 집합중 작은 데이터를 '=' 조인이 되는 컬럼값으로 Hash Table를 생성한 후에 후행 테이블을 Scan 하면서 Join이 이루어 지는데요. 이때 후행 테이블 컬럼 조건에 무거운함수가 있다면 속도가 기하 급수적으로 느려집니다. 이유는 후행 테이블 Full Scan시에 먼저 상수값으로 필터링하고 그 다음에 함수가 있으면 함수 결과 값을 받은 후에 필터를 처리합니다. 즉 필터를 먼저 수행한 다음에 조인이 이루어 집니다. 상수값은 어차피 읽은 값이기 때문에 성능에 영향을 많이 주지는 않지만 함수는 후행테이블 로우수 만큼 수행이 되기 때문입니다. 그러면 어떻게 해야 할까요? 먼저 상수값으로 필터링 한 다음 .. 공감수 0 댓글수 0 2016. 12. 4.
  • [오라클] WITH문 활용하는 2가지 방법 오라클 WITH문은 아래와 같습니다. WITH V_XXX -- 별칭 AS( SELECT ~~~~)SELECT *FROM V_XXX; V_XXX 는 실채호된뷰(MATERIALIZE) 와 인라인뷰(INLINE) 2가지로 사용할 수 있습니다. 예를 들어 V_XXX가 GROUP BY가 있어서 먼저 데이터셋을 만들고 메인쿼리에서 참조하여 사용할 수 있고,V_XXX가 인라인뷰로 들어가 사용될 수 있습니다. V_XXX가 GROUP BY가 있고 이 작업이 무거워서 먼저 처리한 후에 메인쿼리에서 기타 다른 집합과 조인해서 처리하는게 빠르다고 판단한다면 V_XXX 에 /*+ MATERIALIZE */ 힌트를 주어서 실체화된 뷰로 만들어서 사용하여 성능을 개선할 수 있습니다. 공감수 2 댓글수 0 2016. 12. 2.
  • [오라클] ROLLUP 활용 일자별, 제품코드별 판매금액 소계, 합계 구하기... 일자 상품코드 판매금액 20160101 AAA 500 20160102 AAA 400 소계 900 20160101 BBB 1000 20160102 BBB 2000 소계 3000 합계 3900 SELECT DECODE(LV, 1, '소계', 3, '합계', V1.DAY) AS "일자" ,DECODE(LV, 0, V1.PRDT_CD, ' ') AS "상품코드" ,SALES_AMT AS "판매금액"FROM( SELECT DAY ,PRDT_CD ,SUM(AMT) AS SALES_AMT ,GROUPING_ID(PRDT_CD, DAY) AS LV FROM 거래 GROUP BY ROLLUP(PRDT_CD, DAY) ORDER BY PRDT_CD , DAY) V1 공감수 0 댓글수 0 2016. 11. 23.
  • [오라클] PL/SQL 블럭 간단히 이용하기 PL/SQL 로 함수나 프로시저를 만들지 않고 간단하게 프로그래밍하는 PL/SQL 블럭 예제 입니다. DECLARE-- 변수 선언li number(10) := 0; BEGIN -- 다량의 데이터 FETCH할 경우 커서 선언..FOR C IN (SELECT NO, NAME FROM T_MEMBER)LOOP DBMS_OUTPUT.PUT_LINE('SEQ = ' || li || ', NAME= ' || C.NAME ); li := li + 1;END LOOP; END; 공감수 0 댓글수 0 2016. 11. 22.
  • [오라클] Inequality 연산자 3가지 Equality 연산자는 "=" 하나 뿐인데,Inequality 연산자는 3가지가 있다. "!=", "", "^=" 앞 2가지는 자주 보았는데, 마지막 "^=" 는 오라클 메뉴얼을 읽다가 우연히 알게 됨. 공감수 0 댓글수 0 2016. 11. 15.
  • [오라클] 랜덤 샘플링 방법 두번째 예전에 소개해 드린 SAMPLE() 키워드를 이용한 랜덤 샘플링 방법외에 ORA_HASH() 함수를 이용한랜덤 샘플링 방법을 소개해 드립니다. SELECT *FROM 거래 SAMPLE(5)WHERE 년월 = '201201'; -- 사용법ORA_HASH( 값),ORA_HASH(값, 버킷수);ORA_HASH(값, 버킷수, SEED값); 위 3개의 ORA_HASH함수 사용법 중에서 세번째 방법을 활용하면 더 다양하게 랜덤 샘플링 결과를 얻을 수 있습니다. SELECT *FROM 거래WHERE 년월 = '201201' AND ORA_HASH(주문번호, 50, 5) IN (24, 48) ==> 주문번호로 HASH함수를 만들고 50개의 버킷에 담습니다. 그리고 랜덤 초기화는 5라는 값으로 사용해서 ... ORA_H.. 공감수 0 댓글수 0 2016. 11. 14.
  • [오라클] XML 데이터 파싱하기 오라클에서 특정 컬럼에 저장되어 있는 XML를 파싱하여 값을 가져오는 예제입니다.XML 형식 10000 1. 예제 테이블 생성CREATE TABLE TT_XML(SEQ NUMBER(10),XML_DATA VARCHAR2(4000),PRIMARY KEY(SEQ)) 2. XML 데이터 넣기 INSERT INTO TT_XML VALEUS(1, ' 10000 ');COMMIT; 3. XML 파싱해서 특정 값을 컬럼 형태로 출력(XML 파싱할때는 대소문자 가림) SELECT T1.SEQ ,T1.XML_DATA ,V1.NAME ,V1.VALUEFROM TT_XML T1 ,XMLTABLE( '/BINDS/BIND' PASSING XMLTYPE(T1.XML_DATA) COLUMNS NAME VARCHAR2(50) PA.. 공감수 0 댓글수 0 2016. 11. 4.
  • [오라클] 랜덤 문자열 만들기 DBMS_RANDOM.STRING(opt, len) 함수를 이용하면 랜덤 문자열을 만들 수 있습니다.len = 문자열 길이opt = 'u' or 'U' -> 대문자 알파벳 'l' or 'L' -> 소문자 알파벳 'a' or 'A' -> 대소문자 혼합 'x' or 'X' -> 대문자 알파벳 + 숫자 'p' or 'P' -> 프린트 가능한 문자 ex)SELECT DBMS_RANDOM.STRING('X', 20)FROM DUAL 참고PL/SQL Packages and Types Reference 11g Release 2 공감수 0 댓글수 0 2016. 11. 2.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.