SQL 문 반복 수행 스크립트

2022. 1. 12.·Linux

개요

SQL 문을 반복 수행하는 쉘 스크립트를 두 가지 방식으로 작성해보겠습니다.

 

첫 번째 방식

아래 스크립트는 정해진 횟수만큼 SQL 문을 반복 수행합니다. SQL 문을 수행할 때마다 DB에 접속하는 방식입니다.

$ cat loop1.sh

#!/bin/bash

iteration=${1:-86400}
sleep=${2:-1}

for ((i=1; i<=iteration; i++)); do
    sqlplus -s tuna/tuna << 'EOF'
SET FEEDBACK OFF
SET PAGESIZE 0
SET TIMING   OFF

SELECT TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || ',' || SYS_CONTEXT ('USERENV', 'SID')
  FROM DUAL;

EXIT
EOF
    sleep $sleep
done

 

아래는 쉘 스크립트의 실행 결과입니다.

$ sh loop1.sh 5 1
2022-01-01 00:00:01,1000
2022-01-01 00:00:02,1000
2022-01-01 00:00:03,2000
2022-01-01 00:00:04,2000
2022-01-01 00:00:05,1000

 

두 번째 방식

아래 스크립트도 정해진 횟수만큼 SQL 문을 반복 수행합니다. 첫 번째 방식과 달리 DB에 한번만 접속하며 처음에 01.sql 파일을 한 번 실행하고, 그 이후부터 02.sql 파일을 반복 실행합니다.

$ cat loop2.sh

#!/bin/bash

iteration=${1:-86400}
sleep=${2:-1}

loop_sql() {
    for ((i=1; i<=iteration; i++)); do
        ((i==1)) && echo "@01" || echo "@02"
        sleep $sleep
    done
    echo "exit"
}

loop_sql | sqlplus -s tuna/tuna

 

아래와 같이 01.sql, 02.sql 파일을 생성하겠습니다.

-- 01.sql
SET FEEDBACK OFF
SET PAGESIZE 0
SET TIMING   OFF

SELECT '01' || ',' || TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || ',' || SYS_CONTEXT ('USERENV', 'SID')
  FROM DUAL;
  
-- 02.sql
SET FEEDBACK OFF
SET PAGESIZE 0
SET TIMING   OFF

SELECT '02' || ',' || TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || ',' || SYS_CONTEXT ('USERENV', 'SID')
  FROM DUAL;

 

아래는 쉘 스크립트의 실행 결과입니다.

$ sh loop2.sh 1 5
01,2022-01-01 00:00:01,1000
02,2022-01-01 00:00:02,1000
02,2022-01-01 00:00:03,1000
02,2022-01-01 00:00:04,1000
02,2022-01-01 00:00:05,1000
저작자표시 비영리 변경금지 (새창열림)
'Linux' 카테고리의 다른 글
  • Alert 로그 AWK 스크립트
  • AWK 날짜 값과 숫자 값 포맷팅
  • rlwrap
  • SQL 문 실행 결과 파싱
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • Oracle (166)
        • SQL (32)
        • PLSQL (10)
        • Performance (72)
        • Administration (36)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (4)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 공지사항

  • 최근 글

  • 최근 댓글

  • 인기 글

  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • hELLO· Designed By정상우.v4.10.0
정희락
SQL 문 반복 수행 스크립트
상단으로

티스토리툴바