반응형

EC2 ( Elastic Compute Cloud)

 > AWS 에 OS 만 설치되어 있는 VM 이라고 생각하면 된다.

 

EBS ( Elastic Block Store )

 > 우리가 생각하는 HDD 나 SSD 처럼 저장장치로 생각

 

S3 ( Simple Storage Store )

 > 사진이나 동영상 같은 파일들을 저장하는 서비스

 

EBS 와 S3 의 차이?

 - EBS : Block Storage 

    > 사용자가 Block Storage 가 있는 컴퓨터에 직접 붙어서 폴더나 파일을 생성하는 작업을 함.

 

 - S3 : Object Storage

    > 웹페이지나 URL 로 HTTP 통신하여 폴더나 파일을 생성할 수 있음.

 

S3 를 사용하면 버킷이라는 단위(버킷 : 여러가지 사물을 하나에 담는다.) 아래

폴더 및 파일을 업로드하여 업로드 된 객체 URL 로 접근하여 폴더나 파일의 내용을 조회 및 수정할 수 있음

 

 

RDS ( Relational Database Service )

 > AWS에서 데이터를 저장할 수 있는 RDB 서버를 제공하는 서비스

 > 기본제공 엔진 : Amazon Aurora, MySQL, MariaDB, PostgreSQL, Oracle, MS SQL

 

Auto Scaling

 > AWS 의 실시간 상황에 맞게 자동으로 인스턴스 개수를 늘리거나 줄여주는 기능

   대상당 애플리케이션 로드 밸러서 요청 수, 평균 CPU 사용률, 평균 네트워크 입출력양을 기준으로 잡고,

   기준치가 초과되면 EC2 인스턴스의 개수를 늘려줄 수 있음.

 

   예를 들어 평소 10개의 EC2 인스턴스를 사용하던 공연예매서버가 공연예매 시작시에는 EC2 인스턴스 서버갯수를

100개로 늘렸다가 트래픽이 줄어들어 정상적인 상태로 돌아오면 10개로 다시 되돌릴 수 있다.

 

Region

 > AWS 의 데이터 센터가 존재하는 지역을 리전이라고 한다.

네트워크 속도로 인해 주 사용자가 서버 위치와 가까운 것이 좋음.

한국에서 서버를 관리하지만 런던에 있는 주재원에 서비스를 한다면 런던에 있는 리전을 선택하는 것이 서비스 속도가 더 좋음.

 

 

Availability Zone

 > 여러개의 데이터 센터들을 논리적으로 결합하여 만든 데이터 센터

한개의 Region 에서 서비스 중 장애가 발생 시 타 지역에 있는 Availablility Zone 에 있는 다른 데이터 센터를 사용할 수 있다.

 

 

EC2 요금제

 1. On-Demand 인스턴스 요금제

   > 사용한 시간에 비례하여 요금을 내는 방식

 

 2. Spot 인스턴스 요금제

   > 경매 방식 요금제

             AWS 에서 놀고 있는 EC2 인스턴스를 경매 방식으로 가격을 입찰하여 사용하는 요금제

             저렴하게 사용할 수는 있으나 스팟 인스턴스 수요가 많아져 가격이 오르면

             AWS 에서 사용하던 인스턴스를 회수할 수 있음.

 

             즉, 작업하다 사라져도 큰 상관없는 인스턴스로 사용하면 비용절감에 용이함.

 

 3. Reserved 인스턴스 요금제

   > 어떤 타입의 인스턴스를 몇년간 사용하겠다고 예약을 하는 요금제

       - Standard 타입

            : 인스턴스크기를 바꿀 수 있음.

       - 컨버터블 타입

            : 인스턴스 타입이나 OS 를 바꿀수 있음

   > 결제조건

        3-1. 전체 선결제

        3-2. 부분 선결제

        3-3. 선결제 없음

 

EBS 요금제

 1. 범용 SSD(gp2) 볼륨 : 월별 제공된 스토리지 GB 당 0.114 USD

 2. 프로비져닝된 IOPS SSD(io1) 볼륨 : 월별 제공된 스토리지 GB 당 0.1278 USD & 월별 프로비전이된 IOPS당 0.0666 USD

 3. 처리량 최적화 HDD(st1) 볼륨 : 월별 제공된 스토리지 GB 당 0.051 USD

 4. 콜드 HDD(sc1) 볼륨 : 월별 제공된 스토리지 GB 당 0.029 USD

 

 

S3 요금제

 1. S3 Standard

   - 모든 데이터 유형에 적합한 범용 스토리지로, 대게 자주 엑세스하는 데이터에 사용됨

 2. S3 Intelligent - Tiering

   - 엑세스 패턴을 알 수 없거나 엑세스 패턴이 변경되는 데이터에 대해 자동 비용 절감 효과 제공

3. S3 Standard - Infrequent Access

   - 라이브 상태가 된 지 오래되었지만 밀리초 단위 엑세스 성능이 요구되는 자주 엑세스 하지 않는 데이터용

4. S3 One Zone - Infrequent Access

   - 밀리초 단위 엑세스 성능이 요구되는 다시 생성 가능한 자주 엑세스하지 않는 데이터용

5. S3 Glacier

   - 검색 옵션이 1분부터 12시간까지인 장기적인 백업 및 아카이브용

 

요청 및 데이터 검색 요금

1. PUT, COPY, POST, LIST 요청

2. GET, SELECT 및 기타 모든 요청

3. 수명 주기 전환 요청

4. 데이터 검색 요청

5. 데이터 검색

 

※ 결과적으로 파일을 저장하는데 드는 요금 + 외부 URL 을 통해 조회 및 수정에도 요금을 지불해야 한다.

 

 

IAM ( Identify and Access Management ) 

   - AWS 에서 생성 및 관리하고 있는 모든 서비스를 안전하게 제어하기 위한 계정 관리 서비스

 

 

VPC ( Vertual Private Cloud )

   - 가상 네트워크를 제공하는 서비스

   - 사용자 계정별로 내부 네트워크 설정 및 관리 기능을 수행한다.

   - EC2 인스턴스 등의 서비스 자원을 생성하면 기본적으로 생성된다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

jmeter 의 webdriver 를 사용하여 selenium 을 사용하다보면

 

iframe 을 포함하고 있는 페이지의 동작이 필요한 경우가 발생하게 됩니다.

 

하지만 selenium 에서 iframe 에 있는 아이디나 tag, xpath, linkText 등등 여러가지를 사용해서

 

iframe 내에 있는 동작을 처리하려고 할 때 정상적으로 되지 않는 경우가 발생합니다.

 

 

<html lang="ko"><script src="chrome-extension://ljdobmomdgdljniojadhoplhkpialdid/page/prompt.js"></script><script src="chrome-extension://ljdobmomdgdljniojadhoplhkpialdid/page/runScript.js"></script><head>
	<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
	<link rel="icon" href="/images/favicon.ico" type="image/x-icon">

	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=Edge">	
	
	<script type="text/javascript" src="/js/jquery/jquery-3.5.1.min.js"></script>
	<script type="text/javascript" src="/js/jquery/jquery.serializeObject.min.js"></script>	

	<title>Test</title>
    
    ....
	<body>
    ....
    <iframe id="iframe-1">
    #document
    <!DOCTYPE html>
    	<html>
        <head>
        <body>
        ....
        	....
            ....
            <div id="iframe_div">
            	....
                ....

 

위의 예시는 기본 html 내 iframe 이 속해있는 구조입니다.

 

이런 구조에서 iframe 내에 있는 iframe_div 를 조작하려고 하면 커서가 iframe 쪽으로 이동하지 않았기 때문에

 

로그도 남지 않고 아무런 반응이 일어나지 않는 경우가 있습니다.

 

그럼 ifrmae 쪽으로 커서를 이동해주어야 iframe 내에 있는

 

컴포넌트들이 동작을 할텐데 어떻게 해야하는지 알아보겠습니다.

 

 

var iframe = WDS.browser.findElement(org.openqa.selenium.By.xpath("//iframe[@name='iframe-1']"))
WDS.browser.switchTo().frame(iframe)

wait.until(ui.ExpectedConditions.visibilityOfElementLocated(org.openqa.selenium.By.id('iframe_div')))
WDS.browser.findElement(org.openqa.selenium.By.xpath("//div[@id='iframe_div']/div[4]/div/div/div/div[2]/span")).click();
WDS.browser.findElement(org.openqa.selenium.By.xpath("//div[@id='iframe_div']/div[27]/div/img")).click();

 

방법은 위와 같이 아주 간단합니다.

 

iframe 을 식별할 수 있는 iframe-1 을 선택할 수 있게 switchTo function 을 사용하면 간단하게 커서 이동이 됩니다.

 

그 후에는 iframe 내에 있는 객체들을 마음껏 사용할 수 있습니다

 

간단하게 사용할 수 있으니 테스트한번 해보시기 바랍니다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

jMeter plugin webDriver 설치 및 사용방법

 

 

성능 테스트를 하기 위해 jMeter 를 설치하고 http request sampler 를 이용하여

 

테스트를 하고 있었는데 dynamic script 를 호출하여 CGI 프로그램을 실행해야하는 부분이 존재하였다.

 

웹페이지 안에 dynamic script 가 정상적으로 호출되지 않아

 

CGI 프로그램의 response 를 정상적으로 받지 못하는 상황이 발생.

 

어떻게 해야 정상적으로 프로그램을 짤 수 있을까 찾아보던 도중

 

jMeter plugin 중 webDriver 라는것이 존재한다는 사실을 확인하였다.

 

webDriver 를 사용하게 되면 기존에 http request Sampler 를 사용했던 것과는 달리

 

sampler 를 추가 했을 때 빈화면이 나와서 당황스러울수도 있다.

 

직접 소스코딩을 하라는 얘기인데 강력한 기능에는 강력한 권한이 부여되니 너무 걱정하지 않아도 된다.

 

사용해보고 어떻게 사용하는지 설치 및 사용방법에 대해 간단하게 정리해놓기로 한다.

 

jMeter 는 정상적으로 설치되었다는 가정하에 시작.

 

 

1. Options 메뉴의 Plugins Manager 선택

 

 

2. webdriver 라고 검색하면 selenium/WebDriver Support 항목을 체크 후  Apply Changes and Restart JMeter 버튼을 클릭한다.

 

 

플러그인이 정상적으로 설치되며, jmeter 가 재시작되게 된다.

 

 

3. Chrome Driver Config 및 WebDriver Sampler

 

이제 Thread Group 내 Chrome Driver Config 와 WebDriver Sampler 를 사용할 수 있게 되었다.

 

 

Chrome Driver Config

 

 

 

WebDriver Sampler

 

4. ChromeWebDriver 를 다운로드 받는다.

 

chromedriver.chromium.org/downloads

 

위 경로에 들어가서 받을 수 있다.

 

chrome web driver

 

현재 자신이 사용하고 있는 chrome browser 의 버전과 동일한 web driver 를 다운받아야 정상적으로 테스트를 할 수 있다. ( 그렇지 않으면 스크립트 오류가 발생하는 것을 확인함 )

 

 

 

 

다운 받은 chromedriver 의 exe 파일은 Chrome Driver Config 쪽에 등록해주면 기본적인 세팅은 끝

 

Chrome Driver Config 에서는 Use Chrome headless mode 를 사용할 수 있다.

 

headless mode 는 jMeter 를 run 시키면 크롬 브라우저가 실행되면서

 

내가 직접 작성한 내용이 브라우저에서 그대로 실행되는데

 

headless mode 를 체크 후 실행하면 back ground 에서 실행되게되니 부하기의 리소스를 덜 먹게 된다.

 

5. webDriver Sampler 소스를 입력

 

 

var pkg = JavaImporter(org.openqa.selenium);
var ui=JavaImporter(org.openqa.selenium.support.ui) 
var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait);

WDS.sampleResult.sampleStart()
WDS.browser.get("http://localhost:8080/index.aspx/?Param=aaa");

var wait = new support_ui.WebDriverWait(WDS.browser, 500);
wait.until(ui.ExpectedConditions.visibilityOfElementLocated(pkg.By.id('login_id')))    
WDS.browser.findElement(pkg.By.xpath("//div[@id='login_btn']/div[3]/div/img")).click();

wait.until(ui.ExpectedConditions.visibilityOfElementLocated(pkg.By.className('ui-menu')))
WDS.browser.findElement(pkg.By.linkText("new report")).click();
wait.until(ui.ExpectedConditions.visibilityOfElementLocated(pkg.By.name('menu-01')));
WDS.browser.findElement(pkg.By.id("FDOI5LBN053KNK39")).click();

var action = new org.openqa.selenium.interactions.Actions(WDS.browser)
action.moveToElement(WDS.browser.findElement(pkg.By.id("FDOI5LBN053KNK39"))).doubleClick().build().perform()
WDS.browser.findElement(pkg.By.id("execute")).click();


WDS.sampleResult.sampleEnd()

 

로컬에 설치해놓은 서버에 접근해서 화면을 조회하는 화면이다.

 

기본적인 개념은 webDriver 를 사용하면 브라우저가 해당 object 를 rendering 하는 시간이 소요되게 되는데

 

rendering 전에 object 를 찾으려고 하면 찾을 수 없으니 object 가 화면에 그려진 후 다음 작업을 진행되도록 처리하였다.

 

object 를 찾는 것은 xpath, id, name, class, linkText 를 이용하여 객체를 찾을 수 있다.

 

좀 더 스크립트를 쉽게 개발하기 위해서는

 

chrome 의 확장프로그램을 이용하여 recording 을 할 수 있는 Katalon Recorder 가 있지만

 

recorder 를 100% 믿을 수는 없는 것이 no such element: Unable to locate element 오류를 만날 수 있기 때문이다.

 

해결 방법은 위에 적어놓음.

 

다음에 다시 load test 를 하는 날에 다시 읽어볼 날이 오겠지~~

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

teradata sql assistant lob information 팝업 안나오게 처리

 

 

teradata를 사용하다보면 가끔 팝업에서 LOB INFORMATION 이라는 팝업이 뜰 때가 있다.

 

 

이 팝업이 뜨면 해당 컬럼을 파일로 저장하게 되어 search 된 조회건수 만큼 파일수가 생성되게 되며

 

 

생성된 파일을 지우지 않고 방치했다가는 해당 폴더가 쓰레기 더미로 쌓이게 되는일이 생기게 된다.

 

 

옵션에서 수정하는 방법

tool > options > Answerset > Handle Binary/Byte columns as BloBs if size

tool > options > Answerset > Handle Varchar columns as CLOBs if size

 

 

결과값이 정해둔 값보다 크면 blob 이나 clob 으로 변경하는 옵션인데

 

 

해당 옵션의 수치를 원하는 수치로 변경하면 lob information 팝업이 뜨지 않도록 설정할 수 있다.

 

 

옵션도 건드리기 싫고 그냥 단순히 조회만 빠르게 해버리고 싶다면

 

 

이 팝업이 활성화 될 때 CAST 함수를 사용하여 VARCHAR 로 변경한다면 정상적으로 조회가 된다.

 

 

CAST ( column1 AS VARCHAR(2000) )

 

 

이런 방식으로 변경하여 사용하면 핻아 팝업의 내용을 보지 않을 수 있다.

 

 

더 궁금한것이 있으면 댓글로 달아서 같이 공유해요~

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

프로젝트를 하고나면 산출물로 나오는 문서중에 테이블 정의서를 자주 만들고는 합니다.

 

 

테이블 정의서를 만들기 위해서 테이블을 하나하나씩 찾아가서

 

 

COLUMN 과 COMMENT 를 복사해서 엑셀 문서에 붙여넣기를 하곤 하는데

 

 

앞으로는 그렇게 하지 말기 위해서 SQL 문을 작성해두었습니다.

 

 

아래 SQL 을 가공하여 사용하면 더 쉬운 문서 한벌이 만들어 질 수 있으니 고효율이 아닐까요

 

 

 

SELECT T1.TABLE_NAME
     , T3.COMMENTS AS TABLE_COMMENTS
     , T1.COLUMN_NAME
     , T2.COMMENTS AS COLUMN_COMMENTS
     , CASE WHEN T1.DATA_TYPE IN ('LONG', 'CLOB', 'DATE') THEN DATA_TYPE
            WHEN T1.DATA_TYPE = 'VARCHAR2' THEN DATA_TYPE || '(' || DATA_LENGTH || ' BYTE)'
            WHEN T1.DATA_TYPE = 'NUMBER'   THEN DATA_TYPE || '(' || DATA_LENGTH || ' BYTE)'
            ELSE T1.DATA_TYPE
             END AS DATA_TYPE
  FROM ALL_TAB_COLUMNS T1
 INNER JOIN USER_COL_COMMENTS T2
    ON T1.TABLE_NAME = T2.TABLE_NAME
   AND T1.COLUMN_NAME = T2.COLUMN_NAME   
 INNER JOIN USER_TAB_COMMENTS T3
    ON T1.TABLE_NAME = T3.TABLE_NAME
 WHERE OWNER = 'SCOTT'
   AND T1.TABLE_NAME = 'EMP'
 ORDER BY T1.TABLE_NAME, T1.COLUMN_ID

 

 

 

 

위의 SQL 만 놓고 보면 특정 한 개의 테이블을 조회를 하는것으로 보이지만

 

조회조건에서 TABLE_NAME 을 제거한다면

 

특정 스키마에 존재하는 테이블의 COLUMN 과 COMMENT, 그리고 DATA_TYPE 까지 한번에 조회할 수 있습니다.

 

테이블 정의서에 맞게 해당 SQL 을 가공하여 사용하면 시간을 조금이나마 아낄 수 있게 됩니다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

windows 자격 증명 관리자 사용 ( 네트워크 드라이브 ID PW 접속정보 저장 )

 

 

네트워크 드라이브를 사용할 때 내 컴퓨터에 네트워크 위치를 등록해서 사용하는 경우가 종종있습니다.

 

 

네트워크 드라이브를 등록하는 방법은 간단합니다.

 

 

내 컴퓨터에서 네트워크 드라이브 연결을 클릭하여

 

 

원하는 NAS 서버 위치와 폴더를 입력해주면 됩니다.

 

 

여기에서 다른 자격 증명을 사용하여 연결을 클릭하면

 

 

다음부터 저장된 접속정보로 바로 네트워크 드라이브를 사용할 수 있게 됩니다.

 

 

그런데 재부팅 했을 때 아이디 패스워드가 저장되지 않고 계속해서 접속정보를 입력하라고 나온다면

 

 

개인 PC 인 경우에는 상관이 없겠지만 윈도우 서버 같은 경우에는 문제가 있을 수 있습니다.

 

 

접속정보가 정상적으로 등록되지 않았기 때문인데

 

 

이런경우 command 창에서 접속정보를 지우고 재등록하면 정상적으로 등록 시킬 수 있습니다.

 

 

명령 프롬프트창을 관리자 권한으로 열어서 다음과 같은 명령어를 실행시킵니다.

 

 

net use

 

 

 

 

특정 서버가 접속된 것을 알 수 있는데 여기서 위의 접속정보를 삭제하기 위해서는 아래의 명령을 사용한다.

 

\\127.0.0.1\Private_share /delete

 

 

위 명령을 사용하면 위의 저장된 정보가 사라지게 되는데

 

 

다시한번 접속정보를 입력후 재부팅을 해주면

 

 

설정을 변경하기 전까지는 특별한 인증없이 지정한 네트워크 드라이브에 접속할 수 있게 된다.

 

 

위의 방법을 사용했는데도 안되는 케이스가 있다면

 

 

자격 증명 관리자라는 곳에 들어가서 해당 서버의 Windows 자격 증명 추가를 클릭하여 등록할 수 있다.

 

 

자격증명은 windows 자격증명, 인증서 기반 자격 증명, 일반 자격 증명이 있는데

 

 

네트워크 드라이브를 자동으로 마운트 시켜주기 위함이라면

 

 

Windows 자격 증명 추가를 선택하여 해당 네트워크 드라이브의 접속정보와 id / pw 를 입력하면

 

 

정상적으로 mount 할 수 있게 된다.

 

 

 

이렇게까지 했는데도 재부팅했을 때 network drive 가 정상적으로 mount 되지 않는다???

 

 

그러면 또 다른 방법을 찾아봐야겠다

 

 

다른 좋은 방법이 있다면 댓글로 공유해주시면 감사드리겠습니다^^

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

오라클 프로시저 내용 조회 ( sql stored procedure content search )

 

 

구축된 시스템의 프로시저와 함수를 살펴보면 수백개~수천개씩 되는 경우가 허다합니다.

 

 

내가 원하는 테이블이나 컬럼등 특정내용을 사용하는 프로시저나 함수를 찾고 싶은데

 

 

Procedure 나 Function 을 하나하나씩 다 열어볼 수도 없는 노릇이죠

 

 

오라클에서 제공하는 시스템 테이블이 있는데 이 테이블을 활용하면 내가 원하는 내용을 쉽게 찾을 수 있습니다.

 

 

SELECT T1.OBJECT_ID
     , T1.OBJECT_NAME
     , T1.OBJECT_TYPE
     , T2.TEXT
  FROM USER_OBJECTS T1
 INNER JOIN USER_SOURCE T2
    ON T1.OBJECT_NAME = T2.NAME
 WHERE T1.OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION')
   AND T2.TEXT LIKE '%TEST_TABLE%'  /* 찾으려는 프로시저 또는 함수 내 문구 입력 */
  ;

 

 

TEXT 필드에 내가 원하는 내용을 검색하시면 됩니다!

 

 

잘 안되는 것이나 궁금한점이 있으면 같이 해결해나가도록 합시다^^

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

오라클 프로시저 파라미터 테이블에 사용

 

 

오라클 프로시저를 사용할 때 파라미터를 테이블에 사용하는 방법에 대해 알아보도록 하겠습니다.

 

 

그럼 일단 아래 예시 프로시저를 확인해볼까요!

 

 

CREATE OR REPLACE PROCEDURE PROC_TABLE_PARAM(p_TB_ID IN VARCHAR2, p_RET OUT VARCHAR2)
IS

/*----------------------------------------------------------------------------
    프로그램명: PROC_TABLE_PARAM 
    작성일 : 2020/08/25
    내  용 : 동적 테이블 파라메터를 이용하여 사용
------------------------------------------------------------------------------*/

    v_FILE_NM   VARCHAR2(100);
    v_ERR_MESG  VARCHAR2(4000);        
    v_RET       VARCHAR2(1000);
    v_SQL       VARCHAR2(1000);
    
BEGIN
    
    BEGIN

        BEGIN

              v_SQL := 'SELECT SUBSTR(FILE_ID, 1, INSTR(FILE_ID , '''||'.'||''',1)-1) AS FILE_ID FROM '|| p_TB_ID ||' WHERE ROWNUM = 1' ;
              EXECUTE IMMEDIATE v_SQL INTO v_FILE_NM ;

        END;

        BEGIN
          
                SELECT REGEXP_REPLACE ( TO_CHAR(WM_CONCAT(ERROR_MSG)), ',', ' | ') AS MSG
                  INTO v_ERR_MESG
                  FROM TEST_A T1
                ;
                
                
        END;
            
        BEGIN
           
            UPDATE TEST_B
            SET    ERR_CODE = p_ERR_TYPE
                 , ERR_MESG = v_ERR_MESG
            WHERE  FILE_ID = v_FILE_NM
            ;      
         END;  
         
         
         COMMIT;
            
    END;

    p_RET := 'OK';
        
EXCEPTION                                                                                          

    WHEN OTHERS THEN
        ROLLBACK;
        p_RET := 'ERROR';
  
END;



 

 

 

여기서 중요하게 봐야 할 부분만 딱 집어보겠습니다.

 

 

#1. 테이블명 파라메터 받기

CREATE OR REPLACE PROCEDURE PROC_TABLE_PARAM(p_TB_ID IN VARCHAR2, p_RET OUT VARCHAR2)

 

p_TB_ID IN VARCHAR2 는 파라메터를 외부에서 받을 수 있습니다.

 

 

테이블명을 외부 프로그램에서 받아오면 프로시져에서 사용할 수 있겠네요

 

 

#2. 테이블명 FROM 절에서 사용하기

v_SQL := 'SELECT SUBSTR(FILE_ID, 1, INSTR(FILE_ID , '''||'.'||''',1)-1) AS FILE_ID FROM '|| p_TB_ID ||' WHERE ROWNUM = 1' ; 
EXECUTE IMMEDIATE v_SQL INTO v_FILE_NM ;

 

 

SQL 문장을 변수에 담아서 문장을 만듭니다.

 

문장을 만들 땐 FROM 절에서 파라메터로 받아온 테이블을 파이프(||) 로 연결하여 사용하였습니다.

 

그리고 EXECUTE IMMEDIATE 처리 하여 SQL 을 실행하도록 처리하였습니다.

 

 

 

간단하게 다이나믹 SQL 을 사용할 수 있었습니다.

 

 

잘 안되거나 궁금한것이 있으면 댓글로 같이 연구해보겠습니다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

ORACLE INSTR

 

 

ORACLE INSTR 함수는 간단한 함수이지만 자주 사용하는 함수가 아니어서

 

 

사용방법을 자주 찾아보는 함수이기도 해서 정리해두려고 합니다.

 

 

 

오라클 Database SQL Reference 사이트에서 INSTR 을 검색해보면 위와 같이 사용할 수 있는 방법을 제시합니다.

 

 

INSTR 은 INSTRB, INSTRC, INSTR2, INSTR4 함수와 동일한 방법으로 사용할 수 있다고 되어 있는데

 

 

사실 다른 것은 제쳐두고 INSTR 하나만 제대로 알아도 사용하는데 무리가 없습니다.

 

 

INSTR 주요 사용처

 

1. 문자타입의 데이터에서 특정 문자열의 위치 찾기

2. 특정 문자열부터 원하는 문자열까지 문자열 자르기 ( SUBSTR 활용 )

 

 

이 두가지를 주요 사용처로 씁니다.

 

 

INSTR 문법 사용

 

INSTR ( 문자열, 검색할 문자, 시작지점, n번째 검색단어 )

 

 

INSTR 사용 방법

 

 

SELECT INSTR('https://docs.oracle.com/', '/', 1, 1) AS TEST1
     , INSTR('https://docs.oracle.com/', '/', 1, 2) AS TEST2 
     , INSTR('https://docs.oracle.com/', '/', 1, 3) AS TEST3
     , INSTR('https://docs.oracle.com/', '/', 1, 4) AS TEST4
  FROM DUAL;

 

 

위 예시를 확인해 보면 'https://docs.oracle.com/' 문자에서 "/" 문자를 찾는 예시입니다.

 

문자열에서 / 가 총 3번이 들어가 있는데

 

4번째 parameter 를 활용하여 / 를 몇번째에 발견했는지를 찾아내는 parameter 입니다.

 

처음 발견했을 때는 7번째

두번째 발견했을 때는 8번째

세번째 발견했을 때는 24번째

네번째는 문자가 없으니 0 을 return 한 것을 알 수 있습니다.

 

 

한단계 더 활용을 하면 아래와 같이 할 수 있겠죠

 

 

SELECT SUBSTR('https://docs.oracle.com/'
            , INSTR('https://docs.oracle.com/', '/', 1, 2)+1
            , LENGTH('https://docs.oracle.com/')-1 - INSTR('https://docs.oracle.com/', '/', 1, 2)
            ) AS TEST5
  FROM DUAL;

도메인명을 알고 싶을 때 이렇게 / 의 자릿수를 찾아서 활용하듯

 

 

원하는 문자를 가공하여 사용하는데 많은 도움을 주는 함수가 INSTR 함수입니다.

 

 

작업을 하시다가 더 궁금한 점이 있으면 댓글로 같이 방법을 찾아봐요^^

 

 

 

 

 

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형

ORACLE ROLLUP, CUBE 예제

 

 

오라클에서 ROLLUP 함수와 CUBE 함수는 그룹함수로 제공되고 있습니다.

 

GROUP BY 절에 사용할 수 있는데 각각 함수의 정의는 다음과 같습니다.

 

 

ROLLUP : 그룹핑 결과에 그룹지은 컬럼의 합계 정보를 추가 조회

CUBE : 그룹으로 지정한 모든 컬럼의 집계 정보를 조회

 

 

비슷한 함수로 사용되지만 결과는 조금 다를 수 있습니다.

 

 

어떻게 다른지 예제로 확인해보도록 하겠습니다.

 

 

#GROUP BY 

 

SELECT T1.JOB
     , T2.DNAME
     , T2.LOC
     , SUM(T1.SAL) AS SALARY
  FROM SCOTT.EMP T1
 INNER JOIN SCOTT.DEPT T2
    ON T1.DEPTNO = T2.DEPTNO
 GROUP BY T1.JOB
        , T2.DNAME
        , T2.LOC

 

 

일반적인 GROUP BY 후 SUM 을 한 결과입니다.

 

 

JOB 과 DNAME 을 그룹핑 후 SAL 값의 합계를 조회한 것을 알 수 있습니다.

 

 

#ROLLUP

 

SELECT T1.JOB
     , T2.DNAME
     , T2.LOC
     , SUM(T1.SAL) AS SALARY
  FROM SCOTT.EMP T1
 INNER JOIN SCOTT.DEPT T2
    ON T1.DEPTNO = T2.DEPTNO
 GROUP BY ROLLUP(T1.JOB, T2.DNAME, T2.LOC)

 

 

GROUP BY 절 안에 ROLLUP 함수를 사용하므로써

 

JOB, DNAME, LOC 별로 SALARY 의 소계값이 조회되고

 

가장 마지막에 JOB과 DNAME과 LOC 의 최종합계값, 즉 ROW DATA 의 전체합계가 조회된 것을 볼 수 있습니다.

 

 

 

 

#CUBE

 

SELECT T1.JOB
     , T2.DNAME
     , T2.LOC
     , SUM(T1.SAL) AS SALARY
  FROM SCOTT.EMP T1
 INNER JOIN SCOTT.DEPT T2
    ON T1.DEPTNO = T2.DEPTNO
 GROUP BY CUBE(T1.JOB, T2.DNAME, T2.LOC)

 

CUBE 함수를 사용하면 ROLLUP 에서 사용했던

 

JOB, DNAME, LOC 별 소계값이 동일하게 조회되며

 

추가적으로 파란색 네모칸으로 조회되는 DNAME(부서)별 SALARY 의 합계값 까지 조회되는 것을 볼 수 있습니다.

 

CUBE 함수를 사용하면 GROUP BY 한 모든 항목에 대해서 집계값을 조회할 수 있는 것을 알 수 있네요

 

조회할 수 있는 모든 조합의 집계 정보를 보고 싶다면 CUBE 함수를 사용할 수 있습니다.

 

너무 많은 정보가 조회되어 데이터를 추출하는데 어려움이 있다면

 

조회조건을 추가하면 좀 더 간략한 정보를 볼 수 있으니 참고하시면 될 것 같습니다.

 

SELECT T1.JOB
     , T2.DNAME
     , T2.LOC
     , SUM(T1.SAL) AS SALARY
  FROM SCOTT.EMP T1
 INNER JOIN SCOTT.DEPT T2
    ON T1.DEPTNO = T2.DEPTNO
 WHERE JOB = 'MANAGER'
 GROUP BY CUBE(T1.JOB, T2.DNAME, T2.LOC)

 

 

 

 

ROLLUP 과 CUBE 의 결정적인 차이점이라고 한다면

 

ROLLUP 은 ROLLUP 함수 안에 들어온 컬럼수 + 1 개의 결과가 조회되며

 

CUBE 는 CUBE 함수 안에 들어온 컬럼수의 2의 n 승개의 결과가 조회되는것이 가장 크다고 볼 수 있네요

 

제가 사용한 예제는 GROUP BY 는 3 + 1 = 3 , CUBE 는 2*2*2 = 8 개의 결과가 나오는 것을 확인할 수 있습니다.

 

ROLLUP 이나 CUBE 함수는 실제로 많이 사용하지는 않지만 이런 기능이 있다 정도로만 알고 있으면 될 것 같습니다.

 

읽어주셔서 감사합니다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,
반응형